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 的写法才支持使用多个语句。)。

相关内容

热门资讯

华润置地:10月实现总合同销售... 11月12日消息,华润置地公告称,10月实现总合同销售金额约310亿元,同比增长12.4%;前10月...
博雅互动:持有比特币2641枚... 11月12日消息,一家总市值约2.3亿美元的港股上市公司,持有的比特币市值竟高达2.26亿美元。博雅...
何立峰会见美国景顺集团总裁兼首... 11月12日消息,中共中央政治局委员、国务院副总理何立峰12日在人民大会堂会见美国景顺集团总裁兼首席...
唐人神:获7000万元回购股份... 11月12日消息,唐人神公告,近日收到交通银行股份有限公司株洲分行出具的《贷款承诺函》,承诺为公司提...
中国天楹:控股股东拟1.5亿元... 11月12日消息,中国天楹公告,公司控股股东南通乾创计划自本公告披露之日起6个月内,通过深圳证券交易...
国资妙手回春,深交所撤回警告,... 随着深交所一纸批复的到来,曾经深陷退市危机的*ST围海终于迎来转机,自2025年12月23日起,该公...
MiniMax递表港交所:今年... 上海企业稀宇科技冲击港交所“大模型第一股”。12月21日,MiniMax(稀宇科技)首次刊发其聆讯后...
百余只货基收益率“破1”!基金... 资产荒背景下,货币基金收益率正加速下探,破“1”正成为普遍现象。最新数据显示,当前,全市场已有百余只...
麦当劳中国,又涨价了 订阅 快刀财经 ▲ 做您的私人商学院连年调价。作者 :林佳怡来源:南方新消费(ID: bestcho...
英伟达被批准入股英特尔 联手重... 中经记者 吴清 北京报道近日,美国联邦贸易委员会(FTC)正式批准英伟达对英特尔50亿美元的战略投资...