2016-06-01 14 views
1

私はここにループしています。繰り返しのたびに、_checkExistingDefaultTimesを呼び出してレコードが存在するかどうかを確認します。SAPUI5約束を使用してコードを実行するのを待ちます。

問題は、私がforループの外に出るまで、ループ内のコードは実行されないということです。

ループが終了する前に.thenコード(oOpeningTimesを押す)を強制するためにPromiseを使用する方法はありますか?

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); 

答えて

4

ループの後、いいえ。 forループは同期構造であり、約束は非同期です。あなたがしなければならないことは、後続のコードを実行する前に、ループで生成されたすべての約束が解決されるまで待つことです。 Thisは、Promise.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); 
}) 
+0

素晴らしい、私は明日それを試してみます。ありがとうございました !! –

関連する問題