【发布时间】:2014-05-06 17:41:09
【问题描述】:
这与this 问题密切相关,但是我无法成功修改/实施解决方案。
我正在构建一个 SPA(单页应用程序)。所以这个项目包括几个 javascript 库。这个特定的实例我是“延迟加载”微风实体。
这是我的代码。我有两个函数可以创建 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 问题中的解决方案的理解,我应该能够做到这一点(如下),并且所有“儿童”都将被加载。
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 函数以使 IMO 代码更简洁(接受来自 @Esailija 的缩短函数并使其更简洁的建议)。
@Bergi 解决了我最初的问题,并通过简单地返回递归函数调用 return self.getChildren(e); 来解决。
感谢您的帮助。
【问题讨论】:
-
我错过了
return声明。 @ArtjomB。
标签: javascript recursion breeze promise