【发布时间】:2021-10-15 01:45:39
【问题描述】:
我想等待从内置谷歌API调用中传入参数的函数调用,并在参数函数执行后返回结果。 但我无法继续下去。
async function list(auth, userId) {
const gmail = google.gmail({ version: 'v1', auth });
const result;
await gmail.users.messages.list({
userId: userId,
}, async (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
console.log(res.data);
result = await res.data; // I want to await this part
});
return result;
}
...
const returnedResult = await list(auth, id);
console.log(returnedResult);
在上面的代码中发生的事情是'result'和'returnResult'保持未定义并且首先被输出,然后res.data被记录到控制台中。 任何帮助,将不胜感激。 提前致谢
编辑:
尽管有解决方法来等待下面回答的此类呼叫。但它仍然没有回答在发出 API 请求时它获得两种形式的内部机制,即 如何
gmail.users.messages.list({...}, (err, res){...});
可以在内部转换为
let result = await gmail.users.messages.list({});
反之亦然。 一种可能的解释似乎是方法重载。但即使是这个概念也不能解释它,因为这两个调用具有完全相同的功能。 对于第一个实现,因为它也是一个涉及承诺的调用,它仍然应该有一些机制来等待请求。
【问题讨论】:
标签: node.js authentication async-await google-oauth serverside-javascript