我有一个简单的例子给我的控制器,并没有按预期工作
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 });
};
输出:START,END,MIDDLE
EXPECT:START,MIDDLE,END
答案 0 :(得分:2)
尝试:
await new Promise(resolve => setTimeout(resolve, 1000))
答案 1 :(得分:0)
你在没有创建promise对象的情况下使用setTimeOut
,所以它正在等待返回setTimeOut
值(这是即时的)而不是等待promise解析。这就是您的await
语句无法正常工作的原因。你需要的是创造一个承诺:
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();
然后将函数设置为等待promise的返回,而不是返回setTimeOut函数的整数。