ECMAScript 2017 中 Promise 中的 then、catch、finally 方法的使用方法
Promise 是一种在 ECMAScript 2015 (ES6) 中引入的对象,它用于表示异步操作最终完成(或失败)并生成相应的结果。 在 ECMAScript 2017 中增加了 then、catch 和 finally 方法,使 Promise 更加灵活强大。本文将介绍这些方法的使用方法,并提供示例代码。
then 方法
then 方法用于处理 Promise 成功时的情况,它接收两个可选参数:onFulfilled 和 onRejected,它们分别表示成功和失败时要执行的回调函数。
promise.then(onFulfilled, onRejected);
onFulfilled: 成功时执行的回调函数,可以接收传入的值作为参数。
onRejected: 失败时执行的回调函数,可以接收错误对象作为参数。
示例代码:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - --------------- --------- -- ------ --- ------------------ -- - ------------------- -- ----- -- - --------------------- ---
在以上代码中,我们创建了一个 Promise 对象并设置了一个 1 秒钟后执行的定时器。在定时器函数中,我们调用了 resolve 方法将 Promise 标记为成功,并返回一个字符串。接着我们使用 then 方法来监听 Promise 的状态变化,当它成功时我们将打印返回的字符串,如果它失败我们将输出错误信息。
catch 方法
catch 方法用于处理 Promise 失败时的情况,它接收一个参数 onRejected,它表示失败时要执行的回调函数。
promise.catch(onRejected);
- onRejected: 失败时执行的回调函数,可以接收错误对象作为参数。
示例代码:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ---------- ---------------- ---- ---------- -- ------ --- ------------------- -- - --------------------- ---
在以上代码中,我们创建了一个 Promise 对象并设置了一个 1 秒钟后执行的定时器。在定时器函数中,我们调用了 reject 方法将 Promise 标记为失败,并返回一个错误对象。接着我们使用 catch 方法来监听 Promise 的状态变化,如果它失败我们将输出错误信息。
finally 方法
finally 方法用于在 Promise 无论成功或失败都会执行的情况,它接收一个参数 onFinally,它表示要执行的回调函数。
promise.finally(onFinally);
- onFinally: 无论 Promise 成功或失败都执行的回调函数。
示例代码:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ---------- ---------------- ---- ---------- -- ------ --- ------------------ -- - -------------------- ------------ ---
在以上代码中,我们创建了一个 Promise 对象并设置了一个 1 秒钟后执行的定时器。在定时器函数中,我们调用了 reject 方法将 Promise 标记为失败,并返回一个错误对象。接着我们使用 finally 方法来监听 Promise 的状态变化,无论它成功或失败我们都将输出一个日志信息。
结论
通过上述介绍,我们了解了在 ECMAScript 2017 中 Promise 中的 then、catch、finally 方法的使用方法,它们使得 Promise 更加灵活强大,可以更好地处理异步操作。使用 Promise 的 then、catch、finally 方法可以帮助我们更好地处理异步操作的结果,提高代码的可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66fb5e4344713626015bece9