gpt4 book ai didi

javascript - JS 中 Promise.all() 和 Promise.allSettled() 的区别?

转载 作者:行者123 更新时间:2023-12-01 14:45:59 27 4
gpt4 key购买 nike

我正在阅读 MDN 的 Promise 手册,我发现这两种方法与我相似:

  • Promise.allSettled(iterable);
  • Promise.all(iterable);

  • 他们都接受一个可迭代的并返回一个包含已完成 Promise 的数组。 s。

    那么,它们之间有什么区别呢?

    最佳答案

    Promise.all一旦数组中的一个 Promise 被拒绝,就会被拒绝。
    Promise.allSettled永远不会拒绝 - 一旦数组中的所有 Promise 都被拒绝或解决,它将解决。

    它们的解析值也不同。 Promise.all将解析为 Promises 解析为的每个值的数组 - 例如 [Promise.resolve(1), Promise.resolve(2)]将变成 [1, 2] . Promise.allSettled反而会给你[{ status : 'fulfilled', value: 1 }, { status : 'fulfilled', value: 2 }] .

    Promise.all([Promise.resolve(1), Promise.resolve(2)])
    .then(console.log);
    Promise.allSettled([Promise.resolve(1), Promise.resolve(2)])
    .then(console.log);


    如果其中一个 Promise 被拒绝, Promise.all将以拒绝值拒绝,但 Promise.allSettled将使用 { status: 'rejected', reason: <error> } 的对象进行解析在数组中的那个位置。

    Promise.all([Promise.reject(1), Promise.resolve(2)])
    .catch((err) => {
    console.log('err', err);
    });
    Promise.allSettled([Promise.reject(1), Promise.resolve(2)])
    .then(console.log);

    关于javascript - JS 中 Promise.all() 和 Promise.allSettled() 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59784175/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com