Promise 中重要的方法 then 和 catch

· 约 4 分钟读完

Promise 是 JavaScript 中一种异步编程的解决方案,它可以帮助我们在异步操作完成后进行回调处理,避免了回调地狱的问题。而 Promise 中的 then 和 catch 方法是 Promise 最重要的方法之一,本文将详细介绍它们的使用方法以及注意事项。

Promise 基本概念

在开始讲解 then 和 catch 方法之前,我们先来了解一下 Promise 的基本概念。

Promise 对象表示一个异步操作的最终完成或失败,并且它会返回一个结果值。Promise 对象有三种状态,分别是 pending(进行中)、fulfilled(已成功)和 rejected(已失败)。当 Promise 对象的状态变为 fulfilled 或 rejected 时,Promise 对象就被称为 settled(已定型)。Promise 对象一旦 settled,就不能再改变状态。

then 方法

then 方法是 Promise 中最常用的方法之一,它用来指定 Promise 对象的成功和失败的回调函数。then 方法有两个参数,分别是成功的回调函数和失败的回调函数。

其中,onFulfilled 是 Promise 对象成功时的回调函数,它会接收 Promise 对象 resolve 方法传递过来的值作为参数。onRejected 是 Promise 对象失败时的回调函数,它会接收 Promise 对象 reject 方法传递过来的错误信息作为参数。

then 方法可以链式调用,即多个 then 方法串联起来,每个 then 方法都会返回一个新的 Promise 对象,这样就可以实现多个异步操作的顺序执行。

在 then 方法中,如果成功的回调函数和失败的回调函数都没有被指定,那么 Promise 对象的状态就会被传递到下一个 then 方法中。

catch 方法

catch 方法是 then 方法的语法糖,它用来指定 Promise 对象的失败的回调函数,它接收一个参数,即 Promise 对象 reject 方法传递过来的错误信息。

catch 方法也可以链式调用,它会返回一个新的 Promise 对象,这样就可以实现多个异步操作的顺序执行。

在 catch 方法中,如果没有指定失败的回调函数,那么 Promise 对象的错误信息就会被传递到下一个 catch 方法中。

注意事项

在使用 then 和 catch 方法时,需要注意以下几点:

  1. then 方法和 catch 方法都会返回一个新的 Promise 对象,因此可以链式调用多个 then 方法和 catch 方法。
  2. then 方法和 catch 方法可以多次调用,但是只有第一次调用有效。
  3. then 方法和 catch 方法中的回调函数都是异步执行的,即会被放到事件循环队列中等待执行。
  4. then 方法和 catch 方法中的回调函数可以返回一个新的 Promise 对象,这样就可以实现异步操作的嵌套执行。
  5. then 方法和 catch 方法中的回调函数可以返回一个普通的值,这样就可以实现同步操作的顺序执行。

示例代码

下面是一个使用 Promise、then 和 catch 方法的示例代码,它实现了异步读取文件并打印内容的功能。

在上面的代码中,我们使用 Promise 封装了 fs.readFile 方法,然后使用 then 方法指定了成功的回调函数,使用 catch 方法指定了失败的回调函数。当文件读取成功时,成功的回调函数会打印文件内容;当文件读取失败时,失败的回调函数会打印错误信息。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d5028ea941bf713494c527