我有一個數組我想要迭代,並根據其長度進行異步調用以獲取我想要添加到新數組的一些數據。對異步調用使用迭代和遞歸
的僞代碼看起來像:
var path =["Cars", "Owners", "Name"];
var parentObject = mainObject;
getChildren (path, parentObject){
var deferred = new JQuery.Deferred();
var pathSplit = path.split(".");
var nestedObjectName = pathSplit[0];
var childrenIds = new Array();
if (pathSplit.length = 2){
return deferred.resolve(parentObject.Id);
}
else{
nestedObject = parentObject[nestedObjectName];
pathSplit.shift();
var promises = [];
for (child in nestedObjects.children){ //iteration
promises.push(
asyncCalltoGetDetails(child).then{ //After this line, the promises array resolves. !?!?!
getChildren(pathSplit, child).then(function(childId){ //recursivity
childrenIds.push(childId);
});
}
);
}
JQuery.when.apply(null, promises).then(function(){
return deferred.resolve(childrenIds);
});
}
return deferred.promise();
}
當我使用一個異步調用我使用的承諾作出一個迭代[]作爲解釋在這裏:How do you work with an array of jQuery Deferreds?
而當我用使用異步方法遞歸調用我使用了一個延期的對象通過所有的方式。正如在這裏解釋的:AngularJS, promise with recursive function
我遇到的問題是,承諾解決了asyncCalltoGetDetails時,但我想解決它,當遞歸getChildren返回deferred.resolve();
任何想法我做錯了什麼?如何正確使用promises []技術和延遲對象在同一個方法中迭代?
謝謝你的時間!
'var path = {「Cars」,「Owners」,「Name」};'這不是一個有效的對象 –
@ A.Wolff。更新。只是僞代碼來sumarize我的實際代碼。 –
很難弄清楚你在這裏做什麼,但是你有沒有嘗試在'getChildren()'方法之外設置數組''promise'?在這裏,每次你調用getChildren()時,'promises'都是一個新數組。 –