亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

異步函數執行的順序

異步函數執行的順序

夢里花落0921 2022-01-13 11:05:36
我正在處理一個舊的代碼庫,并面臨這種情況,在解決承諾后我很難理解執行順序。我更熟悉 async/await 語法或一系列 then-s,但不熟悉這個。這是片段:_loadCaseDetail: funciton (arg1, arg2, arg3) {  var oDataModel = this.getOwnerComponent().getModel('db2');  loadLatestDatasetVersion(oDataModel).then(function (datasetVersion) {    // do something  });  loadCountries(oDataModel).then(function (countries) {    // do something  });  numberOfRulesetChanges(oDataModel).then(function (elements) {    // do something  });  return fireImplicitLock(caseUuid).then(function (lockData) {    // do something  }).then(function () {    // do something  })}loadLatestDatasetVersion, loadCountries, numberOfRulesetChanges, fireImplicitLock- 所有返回承諾我的問題是:在這種情況下,這些承諾之后的所有 then-s 的順序是什么?它是否完全按順序排列,或者不是,我們可以用 say 重構它Promise.all?它甚至需要任何重構嗎?
查看完整描述

2 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

在這種情況下,這些承諾之后的所有 then-s 的順序是什么?

當相關的承諾解決時,該then函數將觸發。這就是異步代碼的意義所在。它會消失,直到它準備好做下一件事。

我們可以用 Promise.all 重構它

在對結果值執行任何操作之前,您可以使用Promise.all等到多個承諾得到解決,但這將是低效的,除非then函數 forC需要來自Aor的數據B


查看完整回答
反對 回復 2022-01-13
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

loadLatestDatasetVersion, loadCountries, numberOfRulesetChanges, fireImplicitLock- 所有返回承諾,它們將一個接一個地插入到事件循環中。


then一旦 Promise 被解決,一部分 Promise 將被執行。哪個 promisethen將被執行取決于各自的promise.


_loadCaseDetail: funciton (arg1, arg2, arg3) {

  var oDataModel = this.getOwnerComponent().getModel('db2');


  loadLatestDatasetVersion(oDataModel).then(function (datasetVersion) {

    // do something

  });


  loadCountries(oDataModel).then(function (countries) {

    // do something

  });


  numberOfRulesetChanges(oDataModel).then(function (elements) {

    // do something

  });


  return fireImplicitLock(caseUuid).then(function (lockData) {

    // do something

  }).then(function () {

    // do something

  })

}

Promise.all 就像一扇門,您可以在其中傳遞一系列承諾,并且只有在所有承諾都解決后才會解決。


let p1 = Promise.resolve(loadLatestDatasetVersion(oDataModel));


let p2 = Promise.resolve(loadCountries(oDataModel));


let p3 = Promise.resolve(numberOfRulesetChanges(oDataModel));


let p4 = Promise.resolve( fireImplicitLock(caseUuid)


let finalPromise = Promise.all([p1,p2,p3,p4]);


finalPromise.then(([datasetVersion,countries,elements,lockData])=>{


    // do something here with datasetVersion, countries, elements, lockData you have all the params cause all the promises are resolved.


})

Promise.all您可以使用如上所示實現相同的目標。


return fireImplicitLock(caseUuid).then(function (lockData) {

    // do something

  }).then(function () {

    // do something

  })

上面的行不會從 Promise 中返回任何結果,它會返回Promise object它的狀態resolved/pending/rejected和value.


查看完整回答
反對 回復 2022-01-13
  • 2 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號