承诺异步操作的链接



考虑以下ui5/javascript中的代码。在for循环中,代码应该始终按照以下顺序执行:getData1, getData2, fnc1(i), getData3, getData4, fnc2(i)在调用函数fnc3()之前。到目前为止,fnc3在i递增之前被调用:

for (var i = 0; i <= intNum; i++) {
getData1(url1, true).then(function() {
getData2(url2, true).then(function() {
fnc1(i);
getData3(url3, true).then(function() {
getData4(url4, true).then(function() {
fnc2(i);
})
})
})
})
}
fnc3();

所有四个getData函数都做一些操作,然后返回一个promise。

function getData() {
var oModel = new JSONModel();
return oModel.loadData(url, true); //asynchronous loading data and returns a promise
}

任何解决方案,我如何使它工作?感谢任何帮助。由于

你在回调地狱中转向承诺,返回每个承诺并将其与then正确链接。在for循环中也使用let代替var,var不是块作用域。您可以在then块的最后添加if语句来运行fn3:

for (let i = 0; i <= intNum; i++) {
getData1(url1, true)
.then(() => getData2(url2, true))
.then(() => {
fnc1(i)
return getData3(url3, true)
})
.then(() => getData4(url4, true))
.then(() => {
fnc2(i)
if(i === intNum) fnc3()
})      
}

最新更新