gpt4 book ai didi

javascript - $q.all 带有递归?

转载 作者:行者123 更新时间:2023-11-28 18:52:03 25 4
gpt4 key购买 nike

我有一个进行递归调用的函数。结构看起来像这样:

var getData = function(data){
makeDbCall().then(function(response){
if(response.something === someCondition){
foreach(object in response)
getData(object ); //calls itself over and over
}
}
)
};

总体思路(避免偏离主题)是,比如说,获取一个城市中的所有酒店、这些酒店中的所有房间、这些房间中的所有家具等。正常的 $q.all foreach 调用类似于this - 函数定义:

var promises = [];

然后返回$q.all:

return $q.all(promises);

我的问题是我不知道从哪里返回 $q.all - 如果我从“getData”返回它,它会在递归的第一次迭代中返回,并且(据我所知)可能不包括如果初始调用在新调用之前解决,则进行后续迭代。

如果我在 getData() 调用之后返回它,我会遇到同样的问题,因为众所周知,除非我们推迟,否则 JavaScript 会继续执行而不等待调用。

我意识到这个问题很模糊,而且我完全可以接受模糊的回答。我只是想看看我是否遗漏了一些绝对基本的东西或者这是否不可能。 (我确实知道如何以一种非常肮脏的方式做到这一点,但我真的很喜欢以某种方式使用 $q.all )。

Here is the actual function that I am trying to wait for with call values changed for sake of example.

最佳答案

我通过嵌套 promise 解析尝试了一些方法,如下所示:

function getData(){
return new Promise((resolve, reject)){
for(let item of response){
getData(item).then((res)=>{
resolve(res);
},(err)=>{
reject(err);
});
}
}
}

诀窍是尽可能使用 Promise。这样,只有当子级也得到解决时,您才能解决顶级 promise ,从而允许您进行异步递归。

关于javascript - $q.all 带有递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34338065/

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