【发布时间】:2022-01-13 06:46:59
【问题描述】:
这是 node.js 中的 Azure 函数 httpTrigger。如何等待f1() 完成然后调用f2()?
model.exports = main(param) // async main plus await f1(param) don't wait either.
{
f1(param)
.then(
good => f2(good, callback), // execution jumps into f2 without waiting for f1 finishes
bad => {...}
);
}
async function f1(param)
{
try
{
// await NOT wait here,
// but waits in Express
await googlelib.verifyIdToken(something, (err, ok) =>
{
if (err) { return Promise.reject("Invalid"); }
else { return Promise.resolve("OK"); }
});
}
catch (e) { return Promise.reject("catch"); }
}
【问题讨论】:
-
就
return googlelib.verifyIdToken(something);,根本不传回调。 -
googlelib来自哪个库? -
当您将回调传递给
googlelib.verifyIdToken()时,它可能不会返回承诺,因此await不会完成任何事情。使用 promise 接口或回调接口,而不是两者的组合。而且,如果您希望async函数返回一个承诺,该承诺会在您的异步工作完成时解决,那么只能在该函数内使用承诺接口,因为普通回调根本不使用async函数. -
@slebetman
const googlelib = new OAuth2Client(googleClientID); -
@PatrickRoberts 似乎是个好主意,google doc