gpt4 book ai didi

javascript - 在循环中调用异步递归函数并在angularjs中获取结果

转载 作者:行者123 更新时间:2023-12-03 03:05:40 25 4
gpt4 key购买 nike

由于一个奇怪的API,我需要在循环中调用异步递归函数并在AngularJS中获取结果。以下是我的情况的示例。

我们有任务列表,每个任务可能没有,一个或多个子任务每个子任务还可以没有、一个或多个子任务我需要在单个对象数组中获取所有任务和子任务问题是为了获取任务的子任务列表,我们需要调用异步API。由于 API 本质上是异步的,我无法获得所有结果

 //We have task lists
allTasks = fromSomeOtherFuncion();
$scope.loadSubTask = function () {
var deferred = $q.defer();
for (var j = 0; j < allTasks.length; j++) {

for (var k = 0; k < allTasks[j].subtasks.length; k++) {
$scope.fetchTaskByTaskID(allTasks[j].subtasks[k].id, deferred);
}
}
return deferred.promise;
};

$scope.fetchTaskByTaskID = function (id, deferred) {
if (!deferred) {
deferred = $q.defer();
}
var client = window.client;
client.tasks.findById(id, {
opt_fields: 'id,name,memberships,subtasks',
}).then(function (response) {

if (response.subtasks.length > 0) {
for (var m = 0; m < response.subtasks.length; m++) {
$scope.fetchTaskByTaskID(response.subtasks[m].id, deferred);
}
}
else {
deferred.resolve(response);
return deferred.promise;
}
});
};

//Then I called the function
$scope.loadSubTask().then(function (subtasks) {
//I need here all Tasks+SubTasks+SubSubTasks..., which I am not getting


});

最佳答案

您需要保留 j 和 K 的值。您可以这样做:

$scope.loadSubTask = function () {
var deferred = $q.defer();

for (var j = 0; j < allTasks.length; j++) {
(function(j){

for (var k = 0; k < allTasks[j].subtasks.length; k++) {
(function(k){

$scope.fetchTaskByTaskID(allTasks[j].subtasks[k].id, deferred);
})(k)
}
})(j)
}
return deferred.promise;
};

You can also use let instead of var. It will be the most cleaner way,

关于javascript - 在循环中调用异步递归函数并在angularjs中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47179665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com