0
我試圖讓下面的方案工作:我有一個ajax調用返回一個對象數組(承諾)。 現在,我有一個成功的函數,對數組中的每個項目進行額外處理,包括進行其他異步Ajax調用。當然,這會導致頭痛,因爲主函數success()在子函數完成之前返回,這不是我想要的。每個子函數調用也返回一個promise,並且我只想在所有項加載時才離開main函數。在陣列上的jQuery異步調用
這是我到目前爲止嘗試過的。主函數getItemData不會等待Q.all(...)返回。 我使用的JS Async和Q.js庫:
function main() {
//performs an ajax get to grab items from server
return data.getItems().then(succeeded).fail(failed);
}
function succeeded(d) {
async.each(d.results, getItemData, function (err) { logger.logError(err) });
function getItemData(item, callback) {
//counts
item.totalSubItems = ko.observable(0);
Q.all([getCounts, getLastSubItem]).then(function fulfilled() {
items.push(item);
return callback;
});
};
function getCounts() {
//another ajax call that returns a promise
data.getItemCounts(item.id()).then(function (c) {
var results = c.results;
//some work
})
.fail(function (error) {
logger.logError(error);
});
function getLastSubItem() {
//also returns a promise
data.getLastSubItem(item.id()).then(function (sub) {
item.lastsub(sub.results[0]);
})
.fail(function (error) {
logger.logError(error);
});
}