NodeJs - Async/Await 内部控制器
NodeJs - Async/Await inside controller
我的控制器有这个简单的例子,但没有按预期工作
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 });
};
输出:开始、结束、中间
预计:开始,中间,结束
尝试:
await new Promise(resolve => setTimeout(resolve, 1000))
您正在使用 setTimeOut
而未创建 promise 对象,因此它正在等待 setTimeOut
值被 returned(即时)而不是等待 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 的 return,而不是 setTimeOut 函数整数的 return。
我的控制器有这个简单的例子,但没有按预期工作
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 });
};
输出:开始、结束、中间
预计:开始,中间,结束
尝试:
await new Promise(resolve => setTimeout(resolve, 1000))
您正在使用 setTimeOut
而未创建 promise 对象,因此它正在等待 setTimeOut
值被 returned(即时)而不是等待 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 的 return,而不是 setTimeOut 函数整数的 return。