我怎样才能让 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
函数,该函数会立即解析。
我有代码:
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
函数,该函数会立即解析。