为什么使用 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;