为什么使用 googleSheets.spreadsheets.values.get 声明变量只能用作 IIFE?
Why does declaring a variable using googleSheets.spreadsheets.values.get only work as an IIFE?
上下文:这不是请求帮助,我找到了解决方案,我只是想了解原因。
工作代码:
var username_result = (await googleSheets.spreadsheets.values.get({
auth,
spreadsheetId,
range: "users!A" + selrow,
})).data;
这 return 是预期的对象,我可以将其登录到控制台以查看其内容。
如果我删除外括号组,即使其不是 IIFE,则 username_result 未定义。
我通读了 this question,它似乎暗示 googleSheets.spreadsheets.values.get({}).data 如果不包装为 IIFE,则不会 return 任何值。
我查看了此函数的 documentation,它明确指出它 return 是一个值范围。
我讨厌实现我不完全理解的代码。为什么这需要一个 IIFE 才能工作?
那不是 IIFE。它只是分组运算符(括号)。
您需要它,因为 await
的优先级低于 属性 访问权限。所以 with 它,你正在等待你从 get(/*...*)
得到什么,然后从 await
的结果中读取 data
属性 ]. 没有它,你正在访问data
属性承诺get(/*...*/)
returns(它没有)并且在结果值上使用 await
(undefined
).
所以你需要分组运算符,或者你可以使用解构:
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;
上下文:这不是请求帮助,我找到了解决方案,我只是想了解原因。
工作代码:
var username_result = (await googleSheets.spreadsheets.values.get({
auth,
spreadsheetId,
range: "users!A" + selrow,
})).data;
这 return 是预期的对象,我可以将其登录到控制台以查看其内容。
如果我删除外括号组,即使其不是 IIFE,则 username_result 未定义。
我通读了 this question,它似乎暗示 googleSheets.spreadsheets.values.get({}).data 如果不包装为 IIFE,则不会 return 任何值。 我查看了此函数的 documentation,它明确指出它 return 是一个值范围。
我讨厌实现我不完全理解的代码。为什么这需要一个 IIFE 才能工作?
那不是 IIFE。它只是分组运算符(括号)。
您需要它,因为 await
的优先级低于 属性 访问权限。所以 with 它,你正在等待你从 get(/*...*)
得到什么,然后从 await
的结果中读取 data
属性 ]. 没有它,你正在访问data
属性承诺get(/*...*/)
returns(它没有)并且在结果值上使用 await
(undefined
).
所以你需要分组运算符,或者你可以使用解构:
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;