JS Promise 中的 then、catch 和 finally 方法详解
在 JavaScript 的异步编程中,经常使用 Promise 来处理回调函数和异步函数的结果。Promise 通过链式调用 then、catch 和 finally 方法来实现对异步操作的响应。这篇文章将对 Promise 中 then、catch 和 finally 方法进行详细解释,并提供一些实例,以帮助理解 Promise。
Promise 简介
Promise 是一种用于异步编程的对象,其代表一个异步操作的最终结果。当 Promise 被创建时,它处于 pending(进行中)状态。当 Promise 成功完成时,它会转为 resolved(已解决)状态,并返回一个值。当 Promise 失败时,则会转为 rejected(已拒绝)状态,并返回一个错误信息。
then 方法
Promise 中 then 方法用于在异步操作完成后处理操作结果,并返回一个新的 Promise。then 方法接受两个函数参数 resolve、reject。当 Promise 状态为 resolved 时,then 方法执行 resolve 函数;当 Promise 状态为 rejected 时,then 方法执行 reject 函数。
-- -------------------- ---- ------- --- ------- - --- ----------------- ------- -- - ------------- -- - --------------- ----------- -- ------ --- --------------------- -- - -------------------- -- --- ------- --------- -- ------- -- - ------------------- ---
在上述示例中,我们创建了一个 Promise,使用 setTimeout 模拟 Promise 的异步操作,并在 Promise 完成后将其状态转为 resolved,并返回一个字符串。然后我们使用 Promise 中 then 方法,传入两个函数参数。当 Promise 状态成功转为 resolved 时,then 方法调用 resolve 函数,并将 'Hello, Promise!' 作为参数传入 resolve 函数。resolve 函数将此结果作为它自己的参数,并传递给 then 方法获得的新 Promise。
catch 方法
Promise 中 catch 方法用于处理 Promise 失败的情况。Promise 中 catch 方法返回一个新的 Promise 对象。如果 Promise 状态为 rejected,则 catch 方法执行,并将错误结果作为它的参数传递给新返回的 Promise。如果 Promise 状态为 resolved,则 catch 方法跳过,并返回状态为 resolved 的 Promise。
-- -------------------- ---- ------- --- ------- - --- ----------------- ------- -- - ------------- -- - --------------- -------- -- ------ --- --------------------- -- - ------------------- -- --- -------- ------ ---
在上述示例中,我们创建了一个 Promise,使用 setTimeout 模拟 Promise 的异步操作,并在 Promise 完成后将其状态转为 rejected,并返回一个错误信息。然后我们使用 Promise 中 catch 方法,传入一个函数参数。当 Promise 状态成功转为 rejected 时,catch 方法调用,并将错误信息 'Promise Error' 作为参数给函数。
finally 方法
Promise 中 finally 方法用于在异步操作完成后处理操作结果,无论操作成功或失败都会执行一段代码,finally 方法返回一个新的 Promise 对象。
-- -------------------- ---- ------- --- ------- - --- ----------------- ------- -- - ------------- -- - --------------- ----------- -- ------ --- --------------------- -- - -------------------- -- --- ------- --------- ------------- -- - -------------------- ----------- ---
在上述示例中,我们创建了一个 Promise,使用 setTimeout 模拟 Promise 的异步操作,并在 Promise 完成后将其状态转为 resolved,并返回一个字符串。然后我们使用 Promise 中 then 方法调用 resolve 函数获得新 Promise,然后对新 Promise 调用 finally 方法,传入一个函数参数。这个函数无论 Promise 成功或失败都会执行,这里打印的是 'Promise Finished'。
总结
通过本文的介绍,Promise 中的 then、catch 和 finally 方法基本概念都可以掌握,并且代码实例也会有助于大家更好的理解 Promise。在开发工作中,Promise 经常被用到,在异步编程过程中使用 Promise 可以优雅的处理异步操作结果,提高代码可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6491d45648841e9894fcfcc2