在 JavaScript 编程中,有许多需要异步执行的操作,例如从服务器获取数据,读取本地文件等等。为了避免回调地狱和提高代码可读性,Promise 函数应运而生。
通过 Promise 函数可以轻松地将异步操作作为参数传递,并利用 then() 方法在操作完成后进行后续操作。但是,其中 .then() 方法可能会让新手有些困惑,因为它接受两个参数。在本文中,我们将详细解释这两个参数的意义和用法。
.then() 方法的基础用法
首先,让我们回忆一下 .then() 方法的基础用法。.then() 方法是 Promise 的原型方法,其基本语法为:
------------------------- -----------
这里的 promise 是要被执行的 Promise 对象,onFulfilled 是当 Promise 对象状态变为“已完成” (fulfilled) 时执行的回调函数,而 onRejected 则是当 Promise 对象状态变为“已失败” (rejected) 时执行的回调函数。
例如,以下代码展示了一个简单的 Promise 示例,其中使用了 .then() 方法:
----- ------- - --- ----------------- ------- -- - ------------- -- - ------------- --------- -- ------ --- --------------------- -- - -------------------- ---
在这个例子中,Promise 对象在 1 秒钟后将状态从“待定” (pending) 改为“已完成” (fulfilled),并返回了一个字符串提示信息“data loaded”。然后,.then() 方法将该字符串作为参数传递给回调函数,并将其输出到控制台中。
第一个参数:onFulfilled
那么,我们来详细解释 .then() 方法的第一个参数 onFulfilled。当 Promise 状态变为“已完成”时,.then() 方法会自动调用 onFulfilled 函数,并将前一个 Promise 对象的执行结果作为传入参数。
onFulfilled 函数接受一个参数,即前一个 Promise 对象的执行结果,和该方法之后的所有 then 方法返回的 Promise 对象。例如,在以下代码示例中,onFulfilled 函数接受的参数 result 就是前一个 Promise 对象执行完成后的结果。
----- ------- - --- ----------------- ------- -- - ------------- -- - ------------- --------- -- ------ --- --------------------- -- - -------------------- ------ ------ - - --- ----------- ---------------- -- - -------------------- ---
在这个例子中,第一个 .then() 方法的回调函数将在前一个 Promise 对象执行完成后,将其返回结果加上一些字符串,并返回一个新的 Promise 对象。然后,第二个 .then() 方法将在新 Promise 对象执行完成后调用,将该对象的返回结果作为参数输出到控制台中。
值得注意的是,如果 onFulfilled 函数返回的是一个 Promise 对象,那么该 Promise 对象会继续向下传递到后面的 Promise 链条中,以实现 Promise 的连续执行。
第二个参数:onRejected
接下来,我们将解释 .then() 方法的第二个参数 onRejected 的用法。当 Promise 状态变为“已失败”时,.then() 方法会自动调用 onRejected 函数,并将前一个 Promise 对象的执行错误作为传入参数。
onRejected 函数接受一个参数,即前一个 Promise 对象执行失败的错误信息,和该方法之后的所有 then 方法返回的 Promise 对象。例如,在以下代码示例中,onRejected 函数接受的参数 error 就是前一个 Promise 对象执行失败后的错误提示信息。
----- ------- - --- ----------------- ------- -- - ------------- -- - ---------- ----------- ------ ---------- -- ------ --- --------------------- -- - -------------------- ------ ------ - - --- ----------- -- ------- -- - --------------------------- ---------------- -- - -------------------- -- ------- -- - --------------------------- ---
在这个例子中,第一个 .then() 方法的回调函数将在前一个 Promise 对象执行失败后,调用 onRejected 函数,并输出错误提示信息到控制台中。然后,第二个 .then() 方法继续从上一个 Promise 对象传递下来,并将错误信息作为参数输出到控制台中。
需要注意的是,如果没有提供 onRejected 函数,即只提供了 onFulfilled 函数,那么 Promise 对象在出现错误时会自动向后传递,直到找到 catch() 方法。
结论
通过对 .then() 方法接收的两个参数的详细解释,我们已经可以清楚地了解 .then() 方法的使用。我们可以通过 onFulfilled 和 onRejected 两个参数,定义 Promise 对象在异步执行完成后的后续操作,实现 Promise 的连续执行。
以上就是 Promise 传参详解的全部内容。希望你能对 .then() 方法的使用有更深入的理解。
示例代码
----- ------- - --- ----------------- ------- -- - ------------- -- - ------------- --------- -- ------ --- --------------------- -- - -------------------- ------ ------ - - --- ----------- ---------------- -- - -------------------- --- ----- ------------ - --- ----------------- ------- -- - ------------- -- - ---------- ----------- ------ ---------- -- ------ --- -------------------------- -- - -------------------- ------ ------ - - --- ----------- -- ------- -- - --------------------------- ---------------- -- - -------------------- -- ------- -- - --------------------------- ---
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672de38eeedcc8a97c86446f