ECMAScript 2019 中的标准 Promise API 介绍

· 约 5 分钟读完

Promise 是 JavaScript 中非常基础的概念,它是一种用于处理异步操作的机制。在 ECMAScript 2019 中,Promise API 也得到了不少的更新和增强。这篇文章将介绍 ECMAScript 2019 中的 Promise API,并给出一些有深度、有指导意义的示例代码,帮助读者更好的理解 Promise 的使用。

Promise 是什么?

简单来说,Promise 是一种代表一项异步操作完成或失败的对象。在创建一个 Promise 对象时,我们可以指定一个回调函数,这个回调函数将在异步操作完成时被触发。通过 Promise API,我们可以对异步操作的结果进行处理,以及对函数异步运行中的异常进行捕获和处理。

ECMAScript 2019 中的 Promise API

在 ECMAScript 2019 中,Promise API 也得到了诸多更新和增强。我们来逐一介绍一下这些新特性。

Promise.prototype.finally()

Promise.prototype.finally() 方法会注册一个回调函数,当 Promise 对象变为 resolved 或者 rejected 状态时都会执行该回调。这个方法返回原 Promise 对象的一个新的 Promise 实例。此方法不管 Promise 对象最终状态如何都会执行回调函数,可以用于处理一些无论当前状态如何都需要执行的最终逻辑。

Promise.allSettled()

在之前,我们只能通过 Promise.all() 方法来等待多个 Promise 完成,返回所有 Promise 的结果。但是,Promise.all() 的问题在于它在有任何一个 Promise 失败时都会抛出异常并拒绝整个 Promise.all() 的结果。这导致了一些问题,因为我们可能会希望知道所有异步操作的结果,而不仅仅是成功的操作结果。在 ECMAScript 2019 中,我们还有一个新方法来解决这个问题,那就是 Promise.allSettled()。和 Promise.all() 不同,Promise.allSettled() 会忽略 Promise 的结果是否成功,而是返回所有 Promise 的结果状态。

Promise.reject()

Promise.reject() 方法会以一个给定的 reason 值作为失败状态返回一个新的 Promise 对象。这个方法比 Promise.resolve() 更方便一些,因为它可以快速地抛出异常并拒绝 Promise 对象。

Promise.allSettled() 迭代穿透

在数组的 Promise 对象中,如果存在 Promise 对象被拒绝时,Promise.all() 和 Promise.race() 都会立即拒绝,并忽略其他 Promise 的状态。而 ECMAScript 2019 中的 Promise.allSettled() 在处理这种情况时更加友好。Promise.allSettled() 中的回调仍然会在数组中的每个 Promise 对象上触发,只是返回的数据中 then 和 catch 都为 undefined。

结语

Promise 在 JavaScript 中扮演着重要的角色,可以让我们更方便地处理异步操作而不陷入回调地狱。而在 ECMAScript 2019 中,Promise API 也得到了很多有益的更新和增强,使得我们能够对异步处理进行更多的控制和操作。以上所述的 ECMAScript 2019 中的新特性,都是我们在进行前端开发的过程中需要注意并加以应用的。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d68cd0a941bf7134c55e86