我怎样才能让 Promise.all 等待每一个承诺?

How can I make Promise.all wait for every promise?

我有代码:

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!');
});

消息 'Done with all' 应该在 .all 中的所有承诺都已解决后立即出现……我是这么想的。阅读规范以及这篇文章:

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

似乎应该是这样,但没有发生。

我希望 Promise.all 如果里面的所有 promises 都得到解决,同样地,如果里面的任何 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 函数,该函数会立即解析。