Contexto: esto no es una solicitud de ayuda, encontré la solución, solo quiero entender por qué.
Código de trabajo:
var username_result = (await googleSheets.spreadsheets.values.get({ auth, spreadsheetId, range: "users!A" + selrow, })).data;Esto devuelve el objeto esperado y puedo registrarlo en la consola para ver su contenido.
Si elimino el conjunto exterior de paréntesis, es decir, haciendo que esto no sea un IIFE, nombre_usuario_resultado no está definido.
Leí esta pregunta y parece sugerir que googleSheets.spreadsheets.values.get({}).data no devolvería ningún valor si no se envuelve como un IIFE. Miré la documentación de esta función y establece explícitamente que devuelve un rango de valores.
Odio implementar código que no entiendo completamente. ¿Por qué tiene que ser un IIFE para que funcione?
Eso no es un IIFE. Es solo el operador de agrupación (paréntesis).
Lo necesita porque await tiene menor prioridad que el acceso a la propiedad. Entonces, con él, está esperando lo que obtiene de get(/*...*) y luego lee la propiedad de data del resultado de await . Sin él, está accediendo a una propiedad de data en la promesa get(/*...*/) devuelve (no tiene uno) y está usando await en el valor resultante ( undefined ).
Entonces necesita el operador de agrupación, o podría usar la desestructuración:
var {data: username_result} = await googleSheets.spreadsheets.values.get({ auth, spreadsheetId, range: "users!A" + selrow, });...o solo dos declaraciones:
const result = await googleSheets.spreadsheets.values.get({ auth, spreadsheetId, range: "users!A" + selrow, }); var username_result = result.data;