Promise.then() 方法的正确使用姿势

Promise.then() 方法是 JavaScript 中 Promise 对象的一种方法,它用于处理 Promise 对象的状态变化。在前端开发中,Promise.then() 方法被广泛应用于异步编程,能够提高代码的可读性和可维护性。本文将介绍 Promise.then() 方法的正确使用姿势,包括使用方式、注意事项和示例代码,帮助读者更好地掌握 Promise.then() 方法的使用。

Promise.then() 方法的使用方式

Promise.then() 方法是 Promise 对象的一个方法,用于注册回调函数,处理 Promise 对象的状态变化。它接受两个参数:onFulfilled 和 onRejected,分别表示 Promise 对象状态变为 fulfilled 和 rejected 时的回调函数。这两个参数都是可选的,如果不传入任何参数,则 Promise.then() 方法会原封不动地返回 Promise 对象本身。

Promise.then() 方法的基本使用方式如下:

------------------------- ------------

其中,promise 表示 Promise 对象,onFulfilled 表示 Promise 对象状态变为 fulfilled 时的回调函数,onRejected 表示 Promise 对象状态变为 rejected 时的回调函数。

Promise.then() 方法的注意事项

在使用 Promise.then() 方法时,需要注意以下几点:

  1. Promise.then() 方法返回的是一个新的 Promise 对象,而不是原来的 Promise 对象。这个新的 Promise 对象的状态和值与原来的 Promise 对象的状态和值可能不同。

  2. 如果 Promise.then() 方法中的回调函数返回一个 Promise 对象,那么这个 Promise 对象会成为新的 Promise 对象的值。如果回调函数返回的是一个非 Promise 对象的值,那么这个值会成为新的 Promise 对象的值。

  3. 如果 Promise.then() 方法中的回调函数抛出异常,那么这个异常会被捕获,并成为新的 Promise 对象的 rejected 状态的值。

  4. 如果 Promise.then() 方法中的回调函数没有传入或者传入的不是函数类型,那么这个回调函数会被忽略,Promise.then() 方法会原封不动地返回 Promise 对象本身。

Promise.then() 方法的示例代码

下面是一个使用 Promise.then() 方法的示例代码:

-------- --------------- -
  ------ --- ------------------------- ------- -
    --------------------- -
      --------------- ---------
    -- ------
  ---
-

---------------
  --------------------- -
    -------------------
    ------ -------------
  --
  ---------------------- -
    --------------------
  --
  ---------------------- -
    ---------------------
  ---

这个示例代码中,asyncFunction() 函数返回一个 Promise 对象,表示异步操作的结果。Promise.then() 方法被连续调用了两次,分别处理 Promise 对象状态变为 fulfilled 时的回调函数。第一个回调函数打印出了 Promise 对象的值,第二个回调函数打印出了 Promise 对象的值的长度。如果异步操作出现异常,Promise.catch() 方法会被调用,打印出异常信息。

在实际开发中,Promise.then() 方法可以结合 Promise.all() 方法、Promise.race() 方法等方法一起使用,以实现更复杂的异步编程逻辑。

结论

本文介绍了 Promise.then() 方法的正确使用姿势,包括使用方式、注意事项和示例代码。掌握 Promise.then() 方法的正确使用姿势,可以提高代码的可读性和可维护性,帮助开发者更好地处理异步编程。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6726d2572e7021665e1b589a