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 });
};

输出:开始,结束,中间

期望:开始,中间,结束

尝试:

await new Promise(resolve => setTimeout(resolve, 1000))

您正在使用setTimeOut而不创建Promise对象,因此它正在等待setTimeOut值返回(即时),而不是等待承诺分辨率。这就是您的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();

,然后设置您的功能以等待承诺的返回,而不是settimeout函数整数的返回。

最新更新