返回

巧用 Promise 的 then / catch / finally

前端

Promise 是 JavaScript 中用来处理异步操作的类。它可以让我们在异步操作完成时执行特定的回调函数。Promise 的状态只能由 pending 转换成 fulfilled 或 rejected,并且只能转换一次。

Promise 的 then 方法用于在 Promise 完成后执行特定的回调函数。这个回调函数接收两个参数,第一个参数是 Promise 的结果,第二个参数是 Promise 的错误信息。如果 Promise 是 fulfilled 状态,则第一个参数会被调用,否则第二个参数会被调用。

Promise 的 catch 方法用于在 Promise 被 rejected 时执行特定的回调函数。这个回调函数接收一个参数,即 Promise 的错误信息。

Promise 的 finally 方法用于在 Promise 完成后(无论其状态是 fulfilled 还是 rejected)执行特定的回调函数。这个回调函数不接收任何参数。

我们来看一个例子。假设我们有一个函数 getSomeData(),它是一个异步函数,可以从服务器获取一些数据。我们想要在数据获取成功后将数据打印到控制台,如果数据获取失败,则打印错误信息。我们可以使用 Promise 的 then 和 catch 方法来实现这个功能:

getSomeData()
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.log(error);
  });

这个代码首先调用 getSomeData() 函数,然后使用 .then() 方法来指定在数据获取成功后执行的回调函数。这个回调函数接收一个参数 data,即从服务器获取的数据。如果数据获取成功,则将数据打印到控制台。

如果数据获取失败,则会调用 .catch() 方法指定的回调函数。这个回调函数接收一个参数 error,即数据获取失败时的错误信息。将错误信息打印到控制台。

我们还可以使用 Promise 的 finally 方法来在数据获取成功或失败后都执行特定的回调函数。例如,我们可以在 finally 方法中关闭一个数据库连接:

getSomeData()
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.log(error);
  })
  .finally(() => {
    closeConnection();
  });

这个代码首先调用 getSomeData() 函数,然后使用 .then() 方法来指定在数据获取成功后执行的回调函数。这个回调函数接收一个参数 data,即从服务器获取的数据。如果数据获取成功,则将数据打印到控制台。

如果数据获取失败,则会调用 .catch() 方法指定的回调函数。这个回调函数接收一个参数 error,即数据获取失败时的错误信息。将错误信息打印到控制台。

最后,无论数据获取成功还是失败,都会调用 .finally() 方法指定的回调函数。这个回调函数中关闭数据库连接。

Promise 的 then / catch / finally 方法是非常有用的,可以帮助我们处理异步操作的结果。我们可以根据自己的需要来使用这些方法来实现不同的功能。