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.
添加回答
举报