首页 > 解决方案 > Javascript Promise 链接无法按预期工作

问题描述

我试图在一个承诺中返回一个承诺,但无法让它工作这是我的代码

async function main() {
  return new Promise((resolve, reject) => {
    p = new Promise((resolve, reject) => {
      f2(async() => {
        resolve();
      });
    });
    array = [];
    array.push(p);
    Promise.all(array).then(resolve(1));
  });
}
setTimeout(async() => {
  console.log(await main());
}, 0);

function f2(callback) {
  console.log("h called");
  setTimeout(() => {
    callback();
  }, 4000);
}

我希望他的阵列将在超时后解决,f2()但它会立即解决。任何帮助将不胜感激

标签: javascriptpromiseasync-await

解决方案


立即调用 resolve 函数,尝试如下操作:

Promise.all(array).then(() => {
    resolve(1);
});

编辑:我想补充一点,传递给 promise 的 then() 回调的是一个语句,使用 resolve(1) 是执行该代码的调用,但是通过将该函数调用包装在匿名函数声明中,整个传递函数声明,然后在需要时调用。


推荐阅读