2016-06-01 14 views
1

Ich bin hier in einer Schleife und für jede Iteration rufe ich _checkExistingDefaultTimes, um zu überprüfen, ob ein Datensatz existiert.SAPUI5 Mit Versprechen auf Codeausführung warten

Das Problem ist, der Code in der Schleife wird nicht ausgeführt, bis ich außerhalb der for-Schleife bin.

Gibt es eine Möglichkeit, ein Promise zu verwenden, so dass es den Code .then (Drücken oOpeningTimes) erzwingt, bevor die Schleife beendet?

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

Antwort

4

Nach der Schleife, nein. Die for-Schleife ist ein synchrones Konstrukt und das Versprechen ist asynchron. Was Sie tun müssen, ist zu warten, bis alle in der Schleife generierten Versprechen gelöst sind, bevor Sie Ihren Folgecode ausführen. This ist, was Promise.all ist für. Sie könnten etwas wie die folgenden tun:

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

Wunderbar, ich werde es morgen versuchen. Vielen Dank !! –

Verwandte Themen