使用 promise.all() 可以实现异步操作的并行聚合,它接收一个包含多个 promise 的数组作为参数,当所有 promise 都成功时返回结果数组,任一失败则立即拒绝。

Promise.all() 如何处理并发请求
Promise.all() 会同时启动传入的所有异步任务,并在全部完成后按输入顺序返回结果。如果其中任何一个 Promise 被拒绝,整个聚合操作将立即失败并抛出错误。

const fetchUser = () => new Promise(resolve => setTimeout(() => resolve({ id: 1, name: 'Alice' }), 100));
const fetchPosts = () => new Promise(resolve => setTimeout(() => resolve([1, 2]), 100));
Promise.all([fetchUser(), fetchPosts()])
.then(results => {
console.log('Success:', results);
})
.catch(error => {
console.error('Failed:', error);
});如何验证并行执行的实际耗时
通过对比串行和并行执行的总耗时,可以直观看到并行聚合的优势。并行执行时,总耗时约等于最慢的那个任务,而串行执行则是所有任务耗时的总和。
立即学习“Java免费学习笔记(深入)”;

const slowTask = (ms) => new Promise(resolve => setTimeout(() => resolve(ms), ms));
// 并行执行
const startParallel = Date.now();
Promise.all([slowTask(500), slowTask(300)])
.then(() => console.log(`Parallel time: ${Date.now() - startParallel}ms`));
// 串行执行
const startSerial = Date.now();
slowTask(500).then(() => slowTask(300)).then(() => console.log(`Serial time: ${Date.now() - startSerial}ms`));当某个异步任务失败时程序的行为是什么
当 Promise.all() 中的某个任务失败时,它会立即进入拒绝状态,不再等待其他任务完成,并将第一个失败的错误传递给 catch 块。这意味着即使其他任务已经成功,它们的返回值也不会被保留在最终结果中。


















