2016-06-01 2 views
1

여기에 루프가 있습니다. 반복 할 때마다 _checkExistingDefaultTimes을 호출하여 레코드가 있는지 확인합니다.SAPUI5 코드 실행 대기 약정 사용

문제는 내가 for 루프 밖에있을 때까지 루프의 코드가 실행되지 않는다는 것입니다.

루프가 완료되기 전에 .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); 

답변

4

루프 이후에는 no. for-loop는 동기식 구조이며 약속은 async입니다. 후행 코드를 실행하기 전에 루프에서 생성 된 모든 약속이 해결 될 때까지 기다려야합니다. 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

놀라운, 나는 내일 시험해 볼게. 고맙습니다 !! –