promise歌词

2025-04-1512:35:47综合资讯0

Promise 简介

Promise 是异步编程的一种解决方案,相较于传统的回调函数和事件,它更加合理和强大。(摘自 )但在初学时,很多人容易走入误区。今天,让我们以一首歌为引,带领大家学习 Promise。

Promise 的创建与理解

Promise 的翻译是“承诺”,其实质就是一个许下承诺的过程。想象这个场景,海鸣威的经典老歌《你的承诺》中,相知相恋的两个人许下了彼此的承诺。但歌曲又暗示了承诺的状态可能发生改变,如“Oh baby 你答应我的我都记得 ,但是你却忘了你的承诺 ,不是说好彼此都不再联络”。这正如同 JS 中的 Promise,其状态可能从进行中(pending)改变为成功(fulfilled)或失败(rejected)。

Promise 的状态与变化

Promise 对象代表一个异步操作,它有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。这些状态只能由异步(或同步)的结果决定,任何其他操作都无法改变这个状态。

当创建一个 Promise 时,它默认处于 pending 状态。但这个状态并不是固定不变的,它可以通过传入的回调函数来改变。这个回调函数接收两个参数,分别是 resolve 和 reject,它们分别用于改变 Promise 实例的状态为 fulfilled 或 rejected。

当 Promise 实例的状态改变时,我们可以使用 then 或 catch 方法添加回调函数,以处理异步操作的结果。

then 和 catch 方法的应用

then 方法用于指定 Promise 实例状态改变时的回调函数。它接收两个参数,第一个参数用于处理 fulfilled 的情况,第二个参数用于处理 rejected 的情况。这两个参数都是可选的。

catch 方法是 then 方法的别名,专门用于指定处理 rejected 的情况。它的存在使得错误处理更加明确和方便。

链式操作与 Promise.all、Promise.race、Promise.allSettled

then 方法可以链式调用,因此可以实现复杂的异步操作链式调用。Promise 还提供了其他静态方法,如 Promise.all、Promise.race 和 Promise.allSettled,用于处理多个 Promise 实例的并发、竞态和结果收集等场景。

Promise 的优点与缺点

Promise 的优点在于可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。它提供统一的接口,使得控制异步操作更加容易。Promise 也有一些缺点,如无法取消、内部错误不会反应到外部、处于 pending 状态时无法得知目前进展等。

ES2017 标准引入了 async 函数,使得异步操作变得更加方便。async 函数实际上是 Generator 函数的语法糖,它的返回值也是一个 Promise 实例。在 async 函数中,一旦遇到 await 就会先返回一个 pending 状态的 Promise 实例,等待异步操作有结果后再继续执行。