首页 > 解决方案 > 如何通过承诺检查异步函数何时完成执行?

问题描述

我有一个被另一个函数调用的异步函数。一旦异步函数完成执行,我想执行一些操作。我正在尝试使用承诺来做到这一点。我认为我在使用 Promise 的某个地方出错了。这是我的代码:

function foo(){
setTimeout(()=>console.log("hello world"),1000)
}

function bar(){
  return new Promise(function(resolve){
  resolve(foo())
  })
}

bar().then(()=>console.log("foo has completed"))

即使在异步完成执行之前,控制台也会打印“foo has completed”。

标签: javascriptpromisees6-promise

解决方案


打电话解决是你应该自己做的事情。由于 foo 立即返回,因此您的承诺也立即得到解决。但是,如果满足您的要求,您可以执行以下操作。

function foo(resolve) {
  setTimeout(() => {
    console.log("hello world");
    resolve();
  }, 1000)
}

function bar() {
  return new Promise(function(resolve) {
    foo(resolve)
  })
}

bar().then(() => console.log("foo has completed"))


推荐阅读