的NodeJS - 异步/等待内部控制器
问题描述:
我有这个简单的例子,我的控制器和预期的NodeJS - 异步/等待内部控制器
export let create = async (req: Request, res: Response) => {
console.log("START");
await setTimeout(() => {
console.log("MIDDLE");
}, 1000);
console.log("END");
return res.json({ data: null });
};
输出不起作用:开始,结束,MIDDLE
的处置:开始,中间,结束
答
尝试:
await new Promise(resolve => setTimeout(resolve, 1000))
答
您使用setTimeOut
而不创建承诺对象,因此它正在等待setTimeOut
值被返回(这是即时的),而不是等待承诺解决方案。这就是您的陈述不按照预期的方式工作的原因。你需要的是建立一个承诺:
function resolveAfterOneSecond(x) {
return new Promise(resolve => {
setTimeout(() => {
console.log("Middle");
resolve(x);
}, 1000);
});
}
async function f1() {
var x = await resolveAfterOneSecond(10);
console.log("End");
}
console.log("Begin");
f1();
,然后设置你的函数,以等待承诺的回报,而不是setTimeout函数整数的回报。
你期望什么? –
我觉得很明显.... START ... MIDDLE ... END – Michalis
'setTimeout'返回一个**数**,而不是一个承诺。只有当你“等待”一个承诺时,执行才会真正“等待”。 –