ES9 中的结果对象类型:Promise.allSettled() 和 Promise.race()
在 ES9 中,新增了两个 Promise 的结果对象类型:Promise.allSettled() 和 Promise.race()。这两个方法在前端开发中十分有用,特别是涉及到并行处理任务的场景。 本文将介绍这两种方法的语法和用法,并提供一些示例代码帮助大家理解。
Promise.allSettled()
Promise.allSettled() 可以接收一个值为 Promise 的可迭代对象作为参数,返回一个 Promise 对象。这个 Promise 对象的 resolve 的值是一个数组,包含所有在给定的可迭代对象中完成的 Promise 的结果对象。
而不像 Promise.all() 的全部完成或全部拒绝机制,Promise.allSettled() 会返回一个数组,其中每个项目都提供一个 status 字段,表示当前 Promise 对象的状态,它可以是 "fulfilled" 或 "rejected"。通过这个方法,我们可以同时获取 Promise 的 resolve 和 reject 状态。 以下是 Promise.allSettled() 方法的语法:
Promise.allSettled(iterable);
下面是一个 Promise.allSettled() 的简单示例:
const promise1 = Promise.resolve(1); const promise2 = Promise.reject(2); const promise3 = new Promise((resolve) => setTimeout(resolve, 3000, 3)); Promise.allSettled([promise1, promise2, promise3]) .then((results) => console.log(results));
在这个示例中,我们使用了三个不同的 Promise 对象。其中,promise1 是一个 resolve 状态的 Promise,promise2 是一个 reject 状态的 Promise,而 promise3 是一个在 3 秒后 resolve 状态的 Promise。 输出结果为:
[ {status: "fulfilled", value: 1}, {status: "rejected", reason: 2}, {status: "fulfilled", value: 3} ]
通过这个输出结果,我们可以看到每个 Promise 的状态和其结果对象。
Promise.race()
Promise.race() 方法可以接收一个值为 Promise 的可迭代对象作为参数,返回一个 Promise 对象,这个 Promise 对象解析为第一个完成的 Promise 对象的结果。
以下是 Promise.race() 方法的语法:
Promise.race(iterable);
下面是一个 Promise.race() 的简单示例:
const promise1 = new Promise((resolve) => setTimeout(resolve, 1000, 'one')); const promise2 = new Promise((resolve) => setTimeout(resolve, 500, 'two')); Promise.race([promise1, promise2]) .then((result) => console.log(result));
在这个示例中,我们使用了两个 Promise 对象。它们都包含一个从 setTimeout() 返回的 Promise,并传递一个相应的字符串值作为它们的 resolve 值。 输出结果为:
two
这个示例演示了 Promise.race() 方法运行时的行为。由于 promise2 在 500ms 后 resolve 完成了,而 promise1 需要等待 1000ms,所以 Promise.race() 返回的结果是 'two'。
结论
Promise.allSettled() 和 Promise.race() 是处理并行任务的两个很有用的方法。有了它们,程序员们不必再自己编写很多代码来处理这些问题。 在书写代码时,应该根据具体问题的需要选择合适的策略,而不是单纯使用一种方法。 如果需要获取所有 Promise 的结果,或者处理所有其他状态返回信息,Promise.allSettled()会是个比较好的选择。如果只需要获取一个 Promise 对象的结果,Promise.race() 则可以避免不必要的等待时间。
上述的两个示例只是对 Promise.allSettled() 和 Promise.race() 的简单演示,使用时需要结合具体业务场景进行选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674d559264abb31b75624503