ES10 中 Promise.allSettled() 和 Promise.any() 新方法使用
在 JavaScript 开发中,Promise 是经常使用的异步编程方案。ES6 引入了 Promise,为异步编程带来了便利。ES10 引入了两个新的 Promise 方法:Promise.allSettled() 和 Promise.any()。这两个方法都是 Promise.all() 的变体,可以更好地应对不同的情况。
Promise.allSettled()
Promise.allSettled() 方法接收一个可迭代对象,比如一个数组,里面包含多个 Promise。所有的 Promise 都会被同时处理,不会有任何一个 Promise 可能会被忽略或默默地失败,而且所有结果都会得到处理。
Promise.allSettled() 的返回值是一个 Promise,返回值里包含每个 Promise 的结果,包括成功的结果和失败的结果。它是一个数组,其中每个对象都有一个 status 字段和一个 value 或 reason 字段。status 解释了操作是否成功,且是以下三个字符串之一:'fulfilled','rejected' 或 'unknown'。成功操作的对象有 value 字段,否则则有 reason 字段。
以下是示例代码:
const promises = [ Promise.resolve('promise 1'), Promise.reject('failed promise'), Promise.resolve('promise 3') ]; Promise.allSettled(promises) .then(results => results.forEach(result => console.log(result.status, result.value || result.reason)));
以上代码将在控制台打印以下输出:
fulfilled promise 1 rejected failed promise fulfilled promise 3
Promise.any()
Promise.any() 方法接收一个可迭代对象,比如一个数组,里面包含多个 Promise。它与 Promise.all() 方法不同,只要有一个 Promise 成功,它就会返回一个 Promise resolved 状态。如果所有 Promises 都失败了,它就会返回一个 Promise rejected 状态。
Promise.any() 的返回值是一个 Promise,返回值里包含第一个完成的 Promise 的值。如果所有 Promise 都失败了,则返回失败原因,否则返回第一个成功 Promise 的结果。
以下是示例代码:
-- -------------------- ---- ------- ----- -------- - - --- ----------------- ------- -- ------------- -- --------------- - --------- ------ ------------------------ ---- ----------------------- - -------- -- --------------------- ------------ -- -------------------- ------------ -- --------------------
以上代码将在控制台打印以下输出:
promise 2
总结
Promise.allSettled() 和 Promise.any() 方法为 Promise 提供了更加灵活的操作。使用这些新的 Promise 方法可以更好地将异步编程的操作结合起来,以满足了我们不同的需求。我们应该深入学习并熟练使用这些方法,提高我们的 JavaScript 技能水平。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64672242968c7c53b07886ba