Promise.allSettled() 和 Promise.all() 有什么区别?

简介: Promise.allSettled() 和 Promise.all() 有什么区别?
  1. 返回结果的完整性
    • Promise.all()
      • 它返回一个新的Promise。只有当所有传入的Promise都变为fulfilled状态时,这个新的Promise才会变为fulfilled状态,并且返回值是一个包含所有Promise成功结果的数组,数组的顺序与传入Promise的顺序一致。例如:
        const promise1 = new Promise((resolve) => setTimeout(() => resolve('结果1'), 1000));
        const promise2 = new Promise((resolve) => setTimeout(() => resolve('结果2'), 2000));
        const promise3 = new Promise((resolve) => setTimeout(() => resolve('结果3'), 1500));
        Promise.all([promise1, promise2, promise3])
        .then((results) => {
                 
          console.log(results); // ["结果1", "结果2", "结果3"]
        });
        
      • 只要有一个Promise被rejected,整个Promise.all()返回的Promise就会立即变为rejected状态,并且会将第一个被rejected的Promise的错误信息传递给catch方法。例如:
        const promiseA = new Promise((resolve) => setTimeout(() => resolve('A成功'), 2000));
        const promiseB = new Promise((resolve, reject) => setTimeout(() => reject('B失败'), 1500));
        const promiseC = new Promise((resolve) => setTimeout(() => resolve('C成功'), 1000));
        Promise.all([promiseA, promiseB, promiseC])
        .catch((error) => {
                 
          console.log(error); // "B失败"
        });
        
    • Promise.allSettled()
      • 它也返回一个新的Promise。这个Promise会等待所有传入的Promise都完成(无论它们是fulfilled还是rejected状态)。返回值是一个包含所有Promise结果的数组,每个结果是一个对象,对象有status属性(值为fulfilledrejected)和valuefulfilled状态下)或reasonrejected状态下)属性。例如:
        const promiseX = new Promise((resolve) => setTimeout(() => resolve('X成功'), 1000));
        const promiseY = new Promise((resolve, reject) => setTimeout(() => reject('Y失败'), 1500));
        const promiseZ = new Promise((resolve) => setTimeout(() => resolve('Z成功'), 2000));
        Promise.allSettled([promiseX, promiseY, promiseZ])
        .then((results) => {
                 
          console.log(results);
          /*
          [
            {status: "fulfilled", value: "X成功"},
            {status: "rejected", reason: "Y失败"},
            {status: "fulfilled", value: "Z成功"}
          ]
          */
        });
        
  2. 适用场景
    • Promise.all()
      • 适用于所有异步操作都必须成功才能进行下一步的情况。比如,当需要同时加载多个资源(如多个图片、多个接口数据),并且只有在所有资源都成功加载后才能进行页面渲染或其他操作时,Promise.all()是很好的选择。它强调所有操作的整体成功。
    • Promise.allSettled()
      • 更适用于需要了解每个异步操作的具体结果,而不管是否有操作失败的情况。例如,在批量处理任务(如批量发送网络请求、批量更新数据库记录)时,想要知道每个任务的完成情况,包括成功和失败的详细信息,就可以使用Promise.allSettled()。它更关注每个任务的个体结果。
目录
相关文章
|
10天前
|
前端开发
在使用Promise.allSettled()时,如何处理不同状态的Promise?
在使用Promise.allSettled()时,如何处理不同状态的Promise?
130 84
|
10天前
|
前端开发
Promise.allSettled()和Promise.all()在处理错误时的差异是什么?
Promise.allSettled()和Promise.all()在处理错误时的差异是什么?
109 74
|
2月前
|
前端开发
Promise.allSettled()方法和Promise.race()方法有什么区别?
`Promise.allSettled()` 提供了一种更全面、更详细的方式来处理多个 `Promise`,而 `Promise.race()` 则更强调速度和竞争。我们需要根据具体的需求来选择使用哪种方法。
|
2月前
|
前端开发
`Promise.allSettled()`方法与`Promise.all()`方法有何不同?
`Promise.allSettled()` 提供了一种更灵活和全面的方式来处理多个 `Promise`,使得我们能够更好地应对各种异步操作的情况,尤其是需要详细了解每个 `Promise` 结果的场景。
|
2月前
|
前端开发 JavaScript
async/await和Promise在性能上有什么区别?
性能优化是一个综合性的工作,除了考虑异步模式的选择外,还需要关注代码的优化、资源的合理利用等方面。
45 4
|
2月前
|
前端开发
使用 Promise.all 处理多个 Promise 同时失败的情况
【10月更文挑战第26天】通过以上几种方法,我们可以根据具体的需求和环境选择合适的方式来处理多个 `Promise` 同时失败的情况,从而更好地进行错误处理和程序的稳定性保障。
222 2
|
3月前
|
前端开发 JavaScript
setTimeout、Promise、Async/Await 的区别
`setTimeout` 是用于延迟执行函数的简单方法;`Promise` 表示异步操作的最终完成或失败;`Async/Await` 是基于 Promise 的语法糖,使异步代码更易读和维护。三者都用于处理异步操作,但使用场景和语法有所不同。
|
5月前
|
前端开发
手写实现ES6的Promise.all()和Promise.race()函数
这篇文章介绍了如何手写实现ES6的`Promise.all()`和`Promise.race()`函数,提供了实现这两个Promise聚合函数的详细代码示例,并展示了如何使用它们。
手写实现ES6的Promise.all()和Promise.race()函数
|
7月前
|
JavaScript 前端开发
vue实现循环发起多个异步请求——Promise.all()与Promise.race()
vue实现循环发起多个异步请求——Promise.all()与Promise.race()
370 1
|
6月前
|
前端开发 JavaScript
js【详解】Promise(含 Promise 的三种状态及其变化,创建 Promise, Promise.all 语法、Promise.all 实战范例、手写 Promise.all)
js【详解】Promise(含 Promise 的三种状态及其变化,创建 Promise, Promise.all 语法、Promise.all 实战范例、手写 Promise.all)
969 0