在前端开发中,我们常常会用到 Promise 来处理异步操作,其中 then 方法是 Promise 的核心,用于处理 Promise 实例的解决(resolve)和拒绝(reject)结果。但是,我们如何正确地传递参数给 then 方法呢?本文将详细讲解 Promise 中 then 方法的参数传递机制。
基本语法
首先,我们来回顾一下 Promise 中 then 方法的基本语法:
promise.then(onFulfilled[, onRejected]);
其中,onFulfilled 是当 Promise 解决时调用的函数,参数为 Promise 的解决值;onRejected 是当 Promise 拒绝时调用的函数,参数为 Promise 的拒绝原因。
参数传递的方式
传递给 onFulfilled 函数
当 Promise 实例的状态变为已解决时,then 方法会调用 onFulfilled 函数,并将 Promise 的解决值作为参数传递给它。我们可以在 then 方法中通过第一个参数来接收这个值。例如:
-- -------------------- ---- ------- ----- ------- - --- --------------- -- - ------------- -- - --------------- -------- -- ------ --- ---------------- -- - ----------------- -- ------- ------ ---展开代码
这里,Promise 的状态变为已解决后,then 方法就会将解决值 'hello, world' 传递给回调函数 res。
需要注意的是,onFulfilled 函数在 Promise 的状态变为已解决时才会执行,如果在 then 方法调用之前,Promise 的状态就已经变为已解决,那么 onFulfilled 函数也会立即执行。
传递给 onRejected 函数
当 Promise 实例的状态变为已拒绝时,then 方法会调用 onRejected 函数,并将 Promise 的拒绝原因作为参数传递给它。我们可以在 then 方法中通过第二个参数来接收这个值。例如:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ---------- ---------------- --------- -- ------ --- ------------------ --- -- - ------------------- -- ------ --------- ----- ---展开代码
这里,Promise 的状态变为已拒绝后,then 方法就会将拒绝原因作为参数传递给回调函数 err。
需要注意的是,如果我们不传递 onRejected 函数给 then 方法,而是直接在 Promise 实例中使用 catch 方法捕获拒绝原因,那么这个拒绝原因就会被 catch 方法的回调函数获取到。
Promise 链
除了基本的使用方法外,then 方法还可以链式调用,形成 Promise 链。这样就可以类比传统的回调函数嵌套,使代码更加优雅和易于维护。
Promise 链式调用的基本语法为:
promise.then().then().catch();
其中,每个 then 方法的返回值都是一个新的 Promise 对象,因此可以继续调用 then 方法。
例如:
-- -------------------- ---- ------- ----- -------- - --- --------------- -- - ------------- -- - ------------ -- ------ --- -------- --------- -- - ----------------- -- -- ------ --- - --- -- --------- -- - ----------------- -- -- ------ ------------------- - ---- -- --------- -- - ----------------- -- -- -- ---------- -- - ------------------- ---展开代码
这里,我们先创建了一个 Promise 实例 promise1,然后依次调用了三个 then 方法,每个 then 方法都会将其前一个 Promise 的解决值作为自己的参数。在第一个 then 方法中,我们将解决值加上 10 并返回;在第二个 then 方法中,我们将解决值再加上 10 并返回一个新的 Promise 实例;在第三个 then 方法中,我们直接打印解决值。
结语
本文介绍了 Promise 中 then 方法的参数传递机制及其使用方法,正确认识和使用 then 方法是有效处理异步操作的关键。希望通过本文的学习,能够帮助读者更好地掌握 Promise 的用法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6792e8a9504e4ea9bd6dc7f6