Javascript 带Q.all的递归承诺
这与问题密切相关,但我无法成功修改/实施解决方案 我正在构建一个SPA(单页应用程序)。所以这个项目包括几个javascript库。在这个特定的实例中,我是“惰性加载”微风实体 这是我的密码。我有两个函数用于创建承诺数组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
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
语句@阿乔姆,噢。我怎么会错过呢。我怎么会错过呢。我怎么会错过呢。我怎么会错过呢。