【发布时间】:2023-03-28 20:19:01
【问题描述】:
下面的代码给了我错误 SyntaxError: await 仅在异步函数和模块的顶层主体中有效。 我不知道我在这里错过了什么。
function timeout(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function test(num) {
return new Promise((resolve, reject) => {
await timeout(1000);
if (num == 11) {
reject("error");
}
else {
resolve("completed");
}
});
}
test(11).then((val) => { console.log(val) }).catch((err) => { console.log(err) });
【问题讨论】:
-
promise 中的回调函数不是异步的,所以显然你不能在其中使用 await。如果它是一种反模式,您可以通过在 Promise (
async (resolve, reject) => {}) 中的匿名回调前面添加async关键字来修复它 -
(resolve, reject)到async (resolve, reject) -
非常感谢。它解决了。所以,如果我是正确的,它会检查上一层函数是否异步。
-
@RohitKumar 它检查当前函数,是的。
标签: javascript node.js