2 回答

TA貢獻1827條經驗 獲得超9個贊
在這種情況下,這些承諾之后的所有 then-s 的順序是什么?
當相關的承諾解決時,該then
函數將觸發。這就是異步代碼的意義所在。它會消失,直到它準備好做下一件事。
我們可以用 Promise.all 重構它
在對結果值執行任何操作之前,您可以使用Promise.all
等到多個承諾得到解決,但這將是低效的,除非then
函數 forC
需要來自A
or的數據B
。

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.
添加回答
舉報