SAPUI5使用promises等待代码执行

时间:2016-06-01 14:14:40

标签: sapui5

我在这里循环,每次迭代我都会调用_checkExistingDefaultTimes来检查记录是否存在。

问题是,在我不在for循环之前,循环中的代码不会被执行。

有什么方法可以使用Promise,以便在循环结束之前强制.then代码(推动oOpeningTimes)?

var oOpeningTimes = [];
for (var i = 0; i < numberOfDays; i++) {
this._checkExistingDefaultTimes(test.SiteInfo.SiteId,test.EffectiveDateFrom,      
 test.EffectiveDateTo)
       .then(function (bResult) {

           oOpeningTimes.push({
               temporaryDate: oDate,
               startTime1: oModelData[oWeekday].startTime1,
               endTime1: oModelData[oWeekday].endTime1,               
           });
});

oStoreData.OpeningTimes = oOpeningTimes;
oModel.setData(oStoreData);

1 个答案:

答案 0 :(得分:4)

循环后,没有。 for循环是一个同步构造,promise是异步的。您需要做的是等待循环中生成的所有promise在运行后续代码之前得到解决。 ThisPromise.all的用途。您可以执行以下操作:

var oOpeningTimes = [];
var oPromises = [];
for (var i = 0; i < numberOfDays; i++) {
oPromises.push(this._checkExistingDefaultTimes(test.SiteInfo.SiteId,test.EffectiveDateFrom,      
 test.EffectiveDateTo)
       .then(function (bResult) {

           oOpeningTimes.push({
               temporaryDate: oDate,
               startTime1: oModelData[oWeekday].startTime1,
               endTime1: oModelData[oWeekday].endTime1,               
           });
}));

Promise.all(oPromises).then(function() {
  oStoreData.OpeningTimes = oOpeningTimes;
  oModel.setData(oStoreData);
})