上下文:这不是请求帮助,我找到了解决方案,我只是想知道为什么。
工作代码:
var username_result = (await googleSheets.spreadsheets.values.get({
auth,
spreadsheetId,
range: "users!A" + selrow,
})).data;
这将返回预期的对象,并且我可以将其记录到控制台以查看其内容。
如果我删除括号的外部集合,即使它不是IIFE, username_result是未定义的。
我通读了这个问题,它似乎表明googlessheets .spreadsheets.values.get({})。如果data没有包装成IIFE,则不会返回任何值。我看了一下这个函数的文档,它明确地声明它返回一个值范围。
我讨厌实现我不完全理解的代码。为什么这需要一个生命才能工作?
那不是生命。它只是一个分组操作符(括号)。
您需要它,因为await
的优先级低于属性访问。所以和,你在等待你从get(/*...*)
得到什么,然后从await
的结果中读取data
的属性。如果没有,您将访问承诺get(/*...*/)
返回的data
属性(它没有一个),并在结果值(undefined
)上使用await
。
所以你需要分组操作符,或者你可以使用解构:
var {data: username_result} = await googleSheets.spreadsheets.values.get({
auth,
spreadsheetId,
range: "users!A" + selrow,
});
…或者只有两个语句:
const result = await googleSheets.spreadsheets.values.get({
auth,
spreadsheetId,
range: "users!A" + selrow,
});
var username_result = result.data;