在 ECMAScript 2018(也称为 ECMAScript 9)中,JavaScript 引入了一些新的 Promise 扩展,使得 Promise 更加强大和灵活。Promise 是 JavaScript 中一种非常重要的异步编程方式。本文将介绍 ECMAScript 2018 中的 Promise 扩展以及它们的用法和优势。
Promise.finally()
Promise.finally()
方法用于指定不管 Promise 对象最终状态如何,都会执行的操作。这样可以避免重复的代码。finally
的参数是一个函数,该函数没有参数,它只是一个操作。
const p = Promise.resolve('成功'); p.then(result => {...}) .finally(() => {...});
上面的代码中,finally()
方法指定不管 Promise 的状态如何,最终都会执行该方法里面的代码。这里的例子中是打印一条日志。
Promise.try()
Promise.try()
方法是一个新的、实验性的方法。该方法会在函数体内部捕捉错误,使得代码看起来更加简洁和优雅,也更容易阅读。
Promise.try(() => JSON.parse(json)) .then(result => {...}) .catch(error => {...});
上面的代码中,Promise.try()
方法中的函数体内部将 JSON.parse()
方法操作放入 Promise 中,并在 Promise 状态改变时捕捉到错误。这样能够使代码更加精简和清晰。
Promise.allSettled()
Promise.allSettled()
方法是 Promise 中的一个重要扩展。该方法返回一个 Promise 数组,该数组包含一个被满足的 Promise 对象数组的状态和值。对于未能 resolve 或是 reject 的 Promise,该方法返回状态和原因。
-- -------------------- ---- ------- ----- -------- - - ---------------------- ------------------ ------------ -- ----- --------------- - ----------------------------- ---------------------------- -- - ------------------------------- -- --------- ------------------------------- -- -------- -- ------------ -- - --------------------- ---
上面的代码中,Promise.allSettled()
方法将包含一个成功 Promise 对象和一个失败 Promise 对象的数组传入,并返回一个 settledPromises
数组。该数组包含了状态和原因的信息,可以帮助我们更好地处理 Promise 中的状态和原因。
Promise.any()
Promise.any()
方法用于同时执行多个 Promise 对象,任何一个 Promise 对象变为 fulfilled 状态,都会返回该 Promise 对象的值。如果全部 Promise 都变为 rejected 状态,则返回 AggregateError 类型的错误。该方法与 Promise.race()
方法类似。但与 Promise.race()
方法不同的是,它返回的是最先被 resolve 的 Promise 的值,而 Promise.race()
方法则只返回第一个 resolve 或者 reject 的 Promise 对象。
const promises = [ fetch('/resource-1').then(() => 'resolved-1'), fetch('/resource-2').then(() => 'resolved-2') ]; Promise.any(promises) .then(result => console.log(result)) .catch(error => console.error(error));
上面的代码中,Promise.any()
方法将两个 Promise 对象数组传入,任何一个 Promise 对象被 resolve,都会返回改变它状态的值。如果两个 Promise 都变为 rejected,则返回 AggregateError 类型的错误。使用 Promise.any()
方法可以方便地处理多个 Promise。
总结
本文已经介绍了 ECMAScript 2018 中的 Promise 扩展。这些新的功能使得 Promise 变得更加具有表现力和强大。其中 Promise.finally()
方法是最常用的一种扩展,用于指定不管 Promise 对象的状态如何,都会执行的操作。Promise.try()
方法是一个新的、实验性的方法,可使代码更加精简和清晰。Promise.allSettled()
方法是一个帮助我们更好地处理 Promise 中的状态和原因的方法,它返回一个包含状态和原因信息的数组。最后,Promise.any()
方法用于同时处理多个 Promise 对象,它返回最先被 resolve 的 Promise 的值。使用这些方法可以帮助我们更好、更方便地处理 Promise 对象,避免冗余的代码,提高代码质量和可读性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c5e3c995c405902ee3cad4