【问题标题】:Why await is not waiting为什么等待不等待
【发布时间】:2021-04-03 14:59:54
【问题描述】:

如何先等待setTimeout完成

function a() {
  setTimeout(() => {
    console.log('should wait');
  }, 5000);
}
async function b(c) {
  console.log('hello');
  await c();
}
b(a);
console.log('out');
我的预期输出是

你好

应该等待

出来

【问题讨论】:

标签: javascript


【解决方案1】:

setTimeout 不返回 Promise,await 仅适用于 Promise。

另外,将console.log("out") 放在b 函数中,使其在a 函数之后运行。

检查下面的代码 sn-p,它可以满足您的需求。

function a() {
  return new Promise((res, rej) => {
    setTimeout(() => {
      console.log('should wait');
      res();
    }, 5000);
  })
}
async function b(c) {
  console.log('hello');
  await c();
  console.log('out');
}
b(a);

【讨论】:

    【解决方案2】:

    如果您希望示例正常工作,函数必须返回一个承诺(等待关键字“等待”以解决返回的承诺):https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

    您的示例应如下所示:

    function a() {
      return new Promise(resolve => {
        setTimeout(resolve, 5000);
      });
    }
    
    async function b(c) {
      console.log('hello');
      await c();
      console.log('should wait');
    }
    await b(a);
    console.log('out');
    

    请注意,您可以在函数上使用 await 关键字,因为将函数声明为异步会自动使其返回一个承诺。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 2022-01-21
      • 2021-05-29
      • 2021-08-02
      • 2020-06-08
      • 1970-01-01
      相关资源
      最近更新 更多