gpt4 book ai didi

javascript - 使用 Q.all 进行递归 Promise

转载 作者:行者123 更新时间:2023-11-28 19:50:41 24 4
gpt4 key购买 nike

这与 this 密切相关问题,但是我无法成功修改/实现该解决方案。

我正在构建一个 SPA(单页应用程序)。所以这个项目包含了几个javascript库。在这个特定实例中,我是“延迟加载” Breeze 实体。

这是我的代码。我有两个函数可以用来创建 Promise 数组。

getChildrenV2: function (entity) {
var self = this,
deferred = Q.defer(),
p = entity.entityAspect.loadNavigationProperty("Children").then(function (data) {
deferred.resolve(data);
});
return deferred.promise;
},

getChildren: function (entity) {
var self = this;
return self.getChildrenV2(entity).then(
function (data) {
return Q.all(data.results.map(
function (e) {
console.log(e);
self.getChildren(e);
}
));
});
},

根据我对上面链接的 SE 问题解决方案的理解,我应该能够执行此操作(如下),并且所有“ child ”都将被加载。

getChildren(entity).then(function () {
console.log("All Children have been loaded");
});

我显然误解了上面链接的 SE 解决方案或我编写递归函数的方式。

编辑

在查看了 @Bergi 和 @Esailija 提供的答案后,我重构了我的代码,如下所示。

getChildren: function (entity) {
var self = this;
return entity.entityAspect.loadNavigationProperty("Children").then(
function (data) {
return Q.all(data.results.map(
function (e) {
console.log(e);
return self.getChildren(e);
}
));
});
},

如果您注意到我删除了 getChildrenV2 函数,以使代码在我看来更加简洁(接受 @Esailija 缩短函数并使其更清晰的建议)。

我的最初问题已由 @Bergi 解决,并通过简单地返回递归函数调用 return self.getChildren(e); 来解决。

感谢您的帮助。

最佳答案

请更改getChildrenV2

getChildrenV2: function (entity) {
return entity.entityAspect.loadNavigationProperty("Children");
}

它不仅更短,而且不会再出现任何错误。

关于javascript - 使用 Q.all 进行递归 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23501416/

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