Promise.all用法

Promise.all 是 JavaScript 中 Promise 对象的一个静态方法,用于并行处理多个异步操作。它接受一个可迭代对象(通常是一个数组)作为参数,该对象包含多个 Promise 对象,并返回一个新的 Promise 对象。

主要功能和用法

  1. 并行处理多个 Promise
    Promise.all 可以同时执行多个 Promise,等所有 Promise 都完成后,才会将结果返回。

  2. 返回结果

    • 当所有 Promise 全部成功时,返回一个新的 Promise,其中的值是一个数组,数组的每一项对应于输入的 Promise 结果,顺序与输入的 Promise 顺序一致。
    • 如果任一 Promise 被拒绝(即状态变为拒绝),Promise.all 将返回一个拒绝状态的 Promise,拒绝的原因是第一个被拒绝的 Promise 的原因。

语法

Promise.all(iterable);
  • 参数iterable 是一个可迭代对象(如数组),包含多个 Promise。
  • 返回值:一个 Promise,表示所有输入 Promise 的结果。

示例

const promise1 = Promise.resolve(3);
const promise2 = 42; // 这个值会被自动转换为一个 resolved Promise
const promise3 = new Promise((resolve, reject) => {
    setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3])
    .then(values => {
        console.log(values); // [3, 42, "foo"]
    })
    .catch(error => {
        console.error('One of the promises failed:', error);
    });

错误处理

如果有一个 Promise 失败:

const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => {
    setTimeout(reject, 100, 'Error!');
});
const promise3 = new Promise((resolve, reject) => {
    setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3])
    .then(values => {
        console.log(values);
    })
    .catch(error => {
        console.error('One of the promises failed:', error); // 'One of the promises failed: Error!'
    });

注意事项

  • 短路:一旦有一个 Promise 被拒绝,Promise.all 就会立即返回拒绝状态的 Promise,后续的 Promise 将不再被等待。
  • 顺序一致:即使某些 Promise 的完成时间不同,返回结果的顺序仍然与调用时的顺序一致。

总结

Promise.all 是处理多个并行异步操作的强大工具,能够简化代码并提高性能。在使用时,需要注意错误处理和 Promise 的返回顺序。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容