Promise 是 JavaScript 中一种用于处理异步操作的方法,可以让我们更加方便地进行异步编程,避免回调地狱的现象。而在 ECMAScript 2017(ES8)中,Promise 新增了 Promise.prototype.finally 方法来处理 Promise 的状态,同时也提供了更加完善的错误处理机制。
Promise.prototype.finally 方法
Promise.prototype.finally 方法是 Promise 实例的方法,其作用是在 Promise 状态变为 resolved 或 rejected 后,无论 Promise 成功还是失败都会执行一次回调函数。
语法如下:
Promise.prototype.finally(onFinally)
其中 onFinally 是在 Promise 状态变为 resolved 或 rejected 后执行的回调函数,该回调函数不接受任何参数,但是可以用 finally 方法中的代码来对 Promise 状态变化时的业务逻辑进行处理。
使用示例:
Promise.resolve(123) .finally(() => { console.log('Promise finally settled.'); });
在以上示例中,无论 Promise 是成功还是失败,Promise.prototype.finally 方法的回调函数都将被执行,输出如下:
Promise finally settled.
错误处理
在异步编程中,错误处理是很重要的一部分,而 Promise 的错误处理也更加完善。Promise 实例的 catch 方法会在 Promise 被 rejected 时调用回调函数,例如:
new Promise((resolve, reject) => { reject(new Error('Promise rejected.')); }).catch(error => { console.error(error.message); // 输出 'Promise rejected.' });
而在 ES8 中,可以使用 catch 方法的链式写法,将错误处理直接写在链式调用后,如下所示:
-- -------------------- ---- ------- ----------------- -------- -- - ----- --- --------- ----- ------------ -- ------------ -- - ----------------------------- -- -- --- ----- ---------- -- ----------- -- - -------------------- ------- ----------- ---
以上示例中,Promise 首先使用 then 方法来抛出一个错误,然后使用 catch 方法来处理该错误,最后还可以使用 finally 方法来处理最终状态。
总结
Promise.prototype.finally 方法在 ES8 中作为 Promise 对象方法新增。它的方法是在 Promise 的状态变为 resolved 或 rejected 后,无论 Promise 成功还是失败都会执行一次回调函数。
而在错误处理方面,Promise 支持 catch 方法和 finally 方法,可以将错误处理机制写入 Promise 的链式调用中,增加代码的可读性和错误处理的灵活性。
在实际项目开发中,合理使用 Promise 的方法以及错误处理机制,对于提高代码质量和开发效率是有很大帮助的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651f9dc595b1f8cacd726ca8