我在这里循环,每次迭代我都会调用_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);
答案 0 :(得分:4)
循环后,没有。 for循环是一个同步构造,promise是异步的。您需要做的是等待循环中生成的所有promise在运行后续代码之前得到解决。 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);
})