javascript - 异步函数执行的顺序
问题描述
我正在处理一个旧的代码库,并面临这种情况,在解决承诺后我很难理解执行顺序。我更熟悉 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
?
它甚至需要任何重构吗?
解决方案
在这种情况下,这些承诺之后的所有 then-s 的顺序是什么?
当相关的承诺解决时,该then
函数将触发。这就是异步代码的意义所在。它会消失,直到它准备好做下一件事。
我们可以用 Promise.all 重构它
在对结果值执行任何操作之前,您可以使用Promise.all
等到多个承诺得到解决,但这将是低效的,除非then
函数 forC
需要来自A
or的数据B
。
推荐阅读
- c# - 当前上下文中不存在名称“item”
- ansible - 基本的 ansible 命令行因模块故障错误而失败
- docker - 无法为高可用性存储创建文件系统
- python - SQLAlchemy:从外键推断的列类型
- java - 为什么 VM 线程会减慢我的 Web 应用程序的速度?
- java - 如何在 selenium java 中处理工具提示
- vue.js - 如何将带有 Jest 的 Vue Test Utils 添加到现有的 Vue-CLI 3 项目中?
- javascript - 如何让用户截取页面?
- android - 如何通过发送 URL 从我们的活动中打开受信任的网络活动
- integer - 在我输入数字时更改数组的长度。(IBM ILOG CPLEX OPL)