首页 > 解决方案 > 我怎样才能让 Promise.all 等待每一个承诺?

问题描述

我有代码:

const testPromise = (stepNumber) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('Done with step ' + stepNumber);
      resolve()
    }, 1000);
  });
}

const testPromiseAll = () => {
  return Promise.all([
    [1, 2, 3].map(number => {
      return testPromise(number);
    })
  ]);
}

testPromiseAll().then(() => {
  console.log('Done with all!');
});

在里面的所有承诺都解决之后,应该立即出现“全部完成”的消息.all……或者我是这么想的。阅读规范以及本文:

https://dev.to/dance2die/promise-race-vs-promise-any-and-promise-all-vs-promise-allsettled-26if

似乎应该是这样,但事实并非如此。

如果内部的所有承诺都已解决,我希望Promise.all解决,同样,如果内部的任何承诺都被拒绝,则整个链都应该失败。

我能做些什么?

标签: es6-promise

解决方案


你需要改变:

const testPromiseAll = () => {
  return Promise.all([
    [1, 2, 3].map(number => {
      return testPromise(number);
    })
  ]);
}

到:

const testPromiseAll = () => {
    return Promise.all(
        [1, 2, 3].map(number => {
            return testPromise(number);
        })
    );
}

您的代码将列表列表传递给Promise.all立即解析的函数。


推荐阅读