乐闻世界logo
搜索文章和话题

Promise 是如何实现链式调用的?

浏览35
6月24日 16:43

Promise 实现链式调用主要依赖于其返回一个新的 Promise 对象的特性。

在 JavaScript 中,Promise 是一个处理异步操作的对象,可以在原调用位置以同步方式处理异步操作结果。

下面是 Promise 的链式调用的基本实现:

  1. Promise 构造函数接收一个执行函数,执行函数接收两个参数:resolve 和 reject,分别用于异步操作成功与失败的情况。
  2. 调用 Promise 对象的 .then 方法提供链式调用。.then 方法接收两个参数(都是可选的):onFulfilledonRejected,分别在 Promise 成功或失败时调用。.then 方法也返回一个 Promise 对象,以便进行链式调用。
  3. 如果 onFulfilledonRejected 返回一个值 x,运行 Promise 解决过程:[Promise Resolution Procedure]
  4. 如果 onFulfilledonRejected 抛出一个异常 e,Promise.then 的返回的 Promise 对象会被 reject 掉。
  5. 如果 onFulfilled 不是函数且 promise1(前一个 promise) 成功执行,promise2(下一个 promise)成功处理 promise1 的 final state。
  6. 如果 onRejected 不是函数且 promise1 失败,promise2 会拒绝 promise1 的原因。

以下是一个示例:

javascript
new Promise(function(resolve, reject) { setTimeout(() => resolve(1), 1000); // 第一步:创建一个 Promise 并执行一个异步操作 }).then(function(result) { // 第二步:注册一个 onFulfilled 回调 console.log(result); // 打印:1 return result + 2; }).then(function(result) { // 第三步:链式调用 console.log(result); // 打印:3 return result + 2; }).then(function(result) { console.log(result); // 打印:5 return result + 2; });

在这个例子中,每个 .then 调用后都返回一个新的 Promise 对象,这个新的 Promise 对象会立即执行,并在执行完毕后调用下一个 .then 注册的回调。通过这种方式,我们可以以同步的方式处理异步的结果,而这就是 Promise 链式调用的本质。

标签:前端ES6Promise