Я звоню в службу, чтобы получить массив идентификаторов, а затем прокручивать каждый из них и вызывать другую службу для их соответствующих данных. Консоль показывает, что служба getBookings в для цикла не обрабатывается последовательно.Как получить цикл for, чтобы дождаться завершения каждого обратного вызова
service.getStoreIDs(function (data1) {
var scheduledBookings = [];
console.log('StoreIDs = ' + data1.length); // There are only 3 in my test data
for (var storeID in data1) {
var s = data1[storeID];
var storeno = s['Storeno'];
service.getBookings(storeno, "", function (data2) {
if (data2.length == 0) {
scheduledBookings.push({ Storeno: storeno, Id: 0 });
}
else {
console.log('[BuildMFB] Storeno ' + storeno + ' = ' + data2.length + ' bookings')
for (var book in data2) {
var b = data2[book];
prevStoreno = storeno;
scheduledBookings.push({
Storeno: (prevStoreno == storeno ? "" : storeno),
Id: b.Id,
BookedBy: b.BookedBy,
Description: b.Description,
StartDate: b.StartDate,
EndDate: b.EndDate,
});
}
prevStoreno = storeno;
}
});
}
$scope.currentBookings = scheduledBookings;
});
Все заказы присваиваемые в магазин 144, как вы можете видеть из консольных сообщений, ниже которой не право, поскольку он имеет только 1 номер.
Я могу только думать, что это проблема обработки async (?).
Console сообщение (BuildMFB является текущая функция):
[BuildMFB] StoreIDs = 3
[BuildMFB] storeID: 101
[BuildMFB] storeID: 131
[BuildMFB] storeID: 144
[getBookings] Storeno 101 has 5 bookings
[BuildMFB] Storeno 144 = 5 bookings
[BuildMFB] Added 253 for 144
[BuildMFB] Added 151 for 144
[BuildMFB] Added 215 for 144
[BuildMFB] Added 217 for 144
[BuildMFB] Added 208 for 144
[BuildMBF] currentBookings = 5
[getBookings] Storeno 131 has 2 bookings
[BuildMFB] Storeno 144 = 2 bookings
[BuildMFB] Added 227 for 144
[BuildMFB] Added 226 for 144
[BuildMBF] currentBookings = 7
[getBookings] Storeno 144 has 1 bookings
[BuildMFB] Storeno 144 = 1 bookings
[BuildMFB] Added 238 for 144
[BuildMBF] currentBookings = 8
Обновлено методом getBookings:
var getBookings = function (storeno, userid, callback) {
var filterString = "";
if (storeno != "0" && userid != "") {
filterString = "?$filter=(Title eq '" + storeno + "') and (Status eq 'Booked') and (BookedBy eq '" + userid + "')&$orderby=Title asc";
}
else if (storeno != "0") {
filterString = "?$filter=(Title eq '" + storeno + "') and (Status eq 'Booked')&$orderby=Title asc";
}
else if (userid != "") {
filterString = "?$filter=(Status eq 'Booked') and (BookedBy eq '" + userid + "')&$orderby=Title asc";
}
else {
filterString = "?$filter=(Status eq 'Booked')&$orderby=Title asc";
}
$http({
method: 'GET',
url: "/_api/web/lists/GetByTitle('Bookings')/Items" + filterString,
headers: {
'Accept': 'application/json; odata=verbose'
},
}).success(function (d) {
var bookings = [];
$(d.d.results).each(function (i, e) {
bookings.push({
Id: e['Id'],
Storeno: e['Title'],
BookedBy: e['BookedBy'],
Description: e['Description'],
StartDate: e['StartDate'],
EndDate: e['EndDate'],
});
});
callback(bookings);
}).error(function (er) {
alert("[getBookings] http error : " + er);
});
};
Можем ли мы увидеть метод 'getBookings'? –
@ Matt% 20Herbstritt - добавлено выше –