Promise 传参详解:promise.then 的两个参数是什么?

在 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