Skip to content

Promise.allSettled(新的API)

用于处理多个Promise的执行,且不会因为某个Promise的reject而终止其他的执行。

主要区别于Promise.all()

Promise.all()

  • 只要有一个reject那么就立即结束

Promise.allSettled()

  • 不管各自的处理结果,而是等所有的都执行结束才返回

语法

js
const promise1 = new Promise((resolve , reject) => setTimeout(() => {
  console.log("resolve")
  resolve(3)
},500))
const promise2 = new Promise((resolve , reject) => setTimeout(() => reject(10),1000))

Promise.allSettled([promise1 , promise2]).then((results) => {
	console.log(results)
})
// 结果为:
// [{"status":"fulfilled","value":3},{"status":"rejected","reason":10}]

// 如果使用Promise.all() ?
Promise.all([promise1 , promise2]).then((results) => {
	console.log(results)
})
// 结果为:
// [{"status":"rejected","reason":10}]
// 也不会打印 “resolve”

参数

  1. iterable

一个可迭代的对象,例如Array,其中每个成员都是Promise。

返回结果

返回一个所有成功或者失败的promise的结果的集合,注意对于每个结果对象,都有一个 status 字符串。如果它的值为 fulfilled,则结果对象上存在一个 value 。如果值为 rejected,则存在一个 reason 。value(或 reason )反映了每个 promise 决议(或拒绝)的值。

如:

  • 成功 {"status":"fulfilled","value":3}

  • 成功 {"status":"rejected","reason":10}