NodeJs - 控制器内的异步/等待[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我有一个这个简单的例子给我的控制器,并没有按预期工作

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

javascript node.js async-await ecmascript-2017
2个回答
2
投票

尝试:

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


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函数的整数。

© www.soinside.com 2019 - 2024. All rights reserved.