Promise链式调用
创始人
2025-05-28 05:02:51
0

Promise是一个对象,它代表了一个异步操作的最终完成或者失败

Promise 对象的状态

Promise 对象通过自身的状态,来控制异步操作。Promise 实例具有三种状态。

  • 异步操作未完成(pending)
  • 异步操作成功(fulfilled)
  • 异步操作失败(rejected)

上面三种状态里面,fulfilledrejected合在一起称为resolved(已定型)。

这三种的状态的变化途径只有两种。

  • 从“未完成”到“成功”
  • 从“未完成”到“失败”

一旦状态发生变化,就凝固了,不会再有新的状态变化。这也是 Promise 这个名字的由来,它的英语意思是“承诺”,一旦承诺成效,就不得再改变了。这也意味着,Promise 实例的状态变化只可能发生一次。

因此,Promise 的最终结果只有两种。

  • 异步操作成功,Promise 实例传回一个值(value),状态变为fulfilled
  • 异步操作失败,Promise 实例抛出一个错误(error),状态变为rejected

链式调用

连续执行两个或者多个异步操作是一个常见的需求,在上一个操作执行成功之后,开始下一个的操作,并带着上一步操作所返回的结果。我们可以通过创造一个 Promise 链来实现这种需求。见证奇迹的时刻:then() 函数会返回一个和原来不同的新的 Promise

在过去,要想做多重的异步操作,会导致经典的回调地狱:

doSomething(function(result) {doSomethingElse(result, function(newResult) {doThirdThing(newResult, function(finalResult) {console.log('Got the final result: ' + finalResult);}, failureCallback);}, failureCallback);
}, failureCallback);

现在,我们可以把回调绑定到返回的 Promise 上,形成一个 Promise 链:

doSomething().then(function(result) {return doSomethingElse(result);
})
.then(function(newResult) {return doThirdThing(newResult);
})
.then(function(finalResult) {console.log('Got the final result: ' + finalResult);
})
.catch(failureCallback);

then 里的参数是可选的,catch(failureCallback) 是 then(null, failureCallback) 的缩略形式。如下所示,我们也可以用箭头函数来表示:

doSomething()
.then(result => doSomethingElse(result))
.then(newResult => doThirdThing(newResult))
.then(finalResult => {console.log(`Got the final result: ${finalResult}`);
})
.catch(failureCallback);

**注意:**一定要有返回值,否则,callback 将无法获取上一个 Promise 的结果。(如果使用箭头函数,() => x 比 () => { return x; } 更简洁一些,但后一种保留 return 的写法才支持使用多个语句。)。

相关内容

热门资讯

机构:预测苹果将在2026年取... 3月19日消息,根据Counterpoint Research《折叠屏智能手机市场预测》报告,受苹果...
深成指跌逾2%,下跌个股近49... 3月19日消息,指数走弱,深成指下挫跌逾2.00%,沪指跌1.43%,创业板指跌1.09%。有色金属...
银行板块局部走强,工商银行涨超... 3月19日消息,银行板块局部走强,工商银行涨超2%,农业银行、建设银行、厦门银行、渝农商行、中国银行...
广钢高投气体半导体材料(成都)... 3月19日消息,天眼查App显示,3月18日,广钢高投气体半导体材料(成都)有限公司成立,法定代表人...
本田将扩大在印度的摩托车生产产... 3月19日消息,本田摩托车印度公司(HMSI)3月19日宣布,将在其位于印度拉贾斯坦邦阿尔瓦尔塔普卡...
5月27日美股盘前要闻 钛媒体App 5月27日消息,美股盘前要闻: 1. 根据一份有关伊朗与美国谅解备忘录框架的“初步非正...
何立峰会见德国联邦经济和能源部... 中新社北京5月27日电 中共中央政治局委员、国务院副总理何立峰27日下午在人民大会堂会见德国联邦经济...
哥伦比亚一军营遭袭 至少12名... 新华社波哥大5月27日电(记者李子健)哥伦比亚北部瓜希拉省首府里奥阿查一处军营附近27日凌晨发生爆炸...
沪深京三市成交额超1万亿元,较... 3月19日消息,沪深京三市成交额超1万亿元,较上日此时放量891亿元,预计全天成交金额约2.2万亿元...
日本央行将基准利率维持在0.7... 3月19日消息,日本央行将基准利率维持在0.75%不变,符合市场预期,为连续第二次会议按兵不动。(广...