Javascript 带Q.all的递归承诺

Javascript 带Q.all的递归承诺,javascript,recursion,breeze,promise,Javascript,Recursion,Breeze,Promise,这与问题密切相关,但我无法成功修改/实施解决方案 我正在构建一个SPA(单页应用程序)。所以这个项目包括几个javascript库。在这个特定的实例中,我是“惰性加载”微风实体 这是我的密码。我有两个函数用于创建承诺数组 getChildrenV2: function (entity) { var self = this, deferred = Q.defer(), p = entity.entityAspect.loadNavigationPropert

这与问题密切相关,但我无法成功修改/实施解决方案

我正在构建一个SPA(单页应用程序)。所以这个项目包括几个javascript库。在这个特定的实例中,我是“惰性加载”微风实体

这是我的密码。我有两个函数用于创建承诺数组

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问题中的解决方案的理解,我应该能够做到这一点(如下),并且所有的“子项”都将被加载

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)来修复


谢谢您的帮助。

您不会从
地图中返回任何内容。换成

… data.results.map(function (e) {
    console.log(e);
    return self.getChildren(e);
//  ^^^^^^
}) …

除了那个小问题外,它看起来不错,应该能起作用。注意@Esailija的回答。

您不会从
地图中返回任何内容。换成

… data.results.map(function (e) {
    console.log(e);
    return self.getChildren(e);
//  ^^^^^^
}) …

除了那个小问题外,它看起来不错,应该能起作用。注意@Esailija的回答。

您不会从
地图中返回任何内容。换成

… data.results.map(function (e) {
    console.log(e);
    return self.getChildren(e);
//  ^^^^^^
}) …

除了那个小问题外,它看起来不错,应该能起作用。注意@Esailija的回答。

您不会从
地图中返回任何内容。换成

… data.results.map(function (e) {
    console.log(e);
    return self.getChildren(e);
//  ^^^^^^
}) …

除了那个小问题外,它看起来不错,应该能起作用。注意@Esailija的答案。

请更改
getChildrenV2


它不仅更短,而且不会再吞下任何错误。

请更改
getChildrenV2


它不仅更短,而且不会再吞下任何错误。

请更改
getChildrenV2


它不仅更短,而且不会再吞下任何错误。

请更改
getChildrenV2


它不仅更短,而且不会再吞下任何错误。

/facepalm。谢谢@Bergi/facepalm。谢谢@Bergi/facepalm。谢谢@Bergi/facepalm。谢谢@BergiI错过了一个
返回
声明@ArtjomB.我错过了一个
return
语句@ArtjomB.我错过了一个
return
语句@ArtjomB.我错过了一个
return
语句@阿乔姆,噢。我怎么会错过呢。我怎么会错过呢。我怎么会错过呢。我怎么会错过呢。