【发布时间】:2019-11-27 09:59:20
【问题描述】:
我正在处理一个旧代码库,并且遇到了这样一种情况,即在解决承诺后我很难理解执行顺序。我更熟悉 async/await 语法或一系列 then-s,但不熟悉这个。这是sn-p:
_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 的顺序是什么?
它是否完全按顺序排列,我们可以用Promise.all 重构它吗?
它甚至需要任何重构吗?
【问题讨论】:
-
这只是从上到下调用函数。每个人都在做自己的工作,而不管其他人。
_loadCaseDetail从fireImplicitLock()返回 Promise。如果loadLatestDatasetVersion、loadCountries、numberOfRulesetChanges和fireImplicitLock之间存在任何依赖关系,并且这有效,那么这只是运气...... -
@Andreas 感谢您的回答,所以所有 then-s 也将在浏览器中以相同的自上而下的顺序执行?
-
没有。谁完成了它的工作就会触发它的
.then()。没有具体的顺序。 -
@Andreas 我明白了,所以如果这些 `then` 块中没有耦合代码,我猜它应该可以正常工作
-
与其说需要重构不如说需要改进。创建了四个 Promise,只返回一个。 _loadCaseDetail 的调用者有权期望所有异步活动都在返回的承诺中表示,而不仅仅是其中的一部分。因此使用Promise.all() 聚合四个promise,并返回由此创建的单个Promise。
标签: javascript promise