异步操作的承诺链接

Promises chaining of asynchronous actions

考虑 ui5/javascript 中的以下代码。在 for 循环内,代码应始终按以下顺序执行:getData1、getData2、fnc1(i)、getData3、getData4、fnc2(i),在调用函数 fnc3() 之前对每个“i”执行。截至目前,在 i 递增之前调用 fnc3:

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 函数都执行一些操作,然后 return 一个承诺。

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

任何解决方案如何让它工作?任何帮助表示赞赏。谢谢

您正在回调地狱中转换承诺,return 每个承诺并将其与 then 正确链接。在 for 循环中也使用 let 而不是 varvar 不是块范围的。你可以在最后 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()
    })      
}