JavaScript Promises

2025年4月23日 | 阅读 4 分钟

JavaScript 中的 Promise 对象用于表示异步操作的最终完成或失败。

借助 JavaScript 中的 Promise,与传统的回调函数相比,用户可以以更易于管理和可读的方式处理异步操作。

Promise 的状态

JavaScript 中的 Promise 有三种状态:

  • Pending(待定): 这是初始阶段,表示异步操作仍在进行中。
  • Fulfilled(已完成): 表示异步操作已成功完成。
  • Rejected(已拒绝): 表示操作失败。

语法

JavaScript Promise 的语法如下:

参数

  • resolve: 标记 Promise 为已完成并提供结果。
  • reject: 标记 Promise 为已拒绝并附带一个错误。

示例

立即执行

输出

Hello, Welcome to TpointTech!

JavaScript Promise 的方法

JavaScript Promise 有几种方法:

Promise.all() 方法

JavaScript 中的 Promise.all() 方法接受一个 Promise 数组,并等待所有 Promise 都解析,然后返回一个 Promise。如果任何 Promise 被拒绝,它会立即拒绝。

示例

立即执行

输出

Task 2 failed

Promise.allSettled() 方法

JavaScript 中的 Promise.allSettled() 方法等待所有 Promise 都完成(settle),并返回一个包含它们结果(已完成或已拒绝)的数组。

示例

立即执行

输出

{ status: 'fulfilled', value: 3 }
{ status: 'rejected', reason: 'Hello' }

Promise.race() 方法

此方法返回一个 Promise,该 Promise 在第一个 Promise 完成(settle)后立即解析或拒绝。

示例

立即执行

输出

Promise 2 resolved

Promise.any() 方法

在 JavaScript 中,Promise.any() 方法接受一个 Promise 可迭代对象,并返回一个 Promise,该 Promise 在任何一个输入 Promise 被满足时立即解析。如果所有 Promise 都被拒绝,则会用 AggregateError 拒绝。

示例

Promise.resolve() 方法

Promise.resolve() 方法返回一个带有给定值的已解析 Promise。

示例

立即执行

输出

5
Hello

Promise.reject() 方法

JavaScript 中的 Promise.reject() 方法返回一个被拒绝并带有给定原因的新对象。

示例

立即执行

输出

Error: Something went wrong!

Promise.finally() 方法

JavaScript 中的 Promise.finally() 方法在 Promise 完成(settled)后执行一个回调,通常用于清理任务。

示例

立即执行

输出

Hello
This runs no matter what.

为什么要在 JavaScript 中使用 Promise?

在 JavaScript 中使用 Promise 有一些原因,其中一些如下:

避免回调地狱

借助 JavaScript 中的 Promise,你可以避免嵌套回调,也称为 回调地狱,这使得代码难以阅读和维护。Promise 允许你链式调用 .then() 和 .catch() 方法,从而实现更线性、更结构化的代码流程。

改进的错误处理

JavaScript Promise 还提供了一种处理异步操作中错误的方法。通过使用 .catch() 方法,你可以处理 Promise 链中发生的任何错误,从而更容易管理和调试错误。

可读性和可维护性

Promise 通过提供清晰一致的处理异步操作的方式,使异步代码更具可读性和可维护性。通过使用 .then() 和 .catch() 方法,我们可以处理成功的结果以及错误,使代码更容易理解。

组合异步操作

在 JavaScript 中,可以使用 Promise.all()、Promise.race() 和 Promise.any() 等方法轻松地比较和组合 Promise,这允许你同时和顺序地处理多个异步操作。

通过 Async/Await 简化语法

Promise 是 async/await 语法的基石,它提供了一种更接近同步的方式来编写异步代码。使用 async/await 可以使异步代码更具可读性,并且更易于处理。

Promise 中的错误处理

JavaScript 中的 Promise 通过使用 .catch() 方法提供内置的错误处理。如果你在 Promise 链的末尾链接一个 .catch() 调用,那么你就可以捕获和处理在任何前置 Promise 中发生的任何错误。

如果链中的任何 Promise 被拒绝,控制流将跳到最近的 .catch() 块,从而让你轻松处理错误。

使用 .catch()

在 JavaScript 中,使用 .catch() 方法来处理 Promise 链中发生的任何错误。

示例

立即执行

输出

Runtime Error:
Something went wrong

结论

总之,Promise 是 JavaScript 中处理异步操作的一种方式。理解状态和方法的概念将帮助你编写更高效、更具可读性的异步代码。


下一个主题JavaScript Promise 链