gpt4 book ai didi

javascript - 带列表的嵌套 Promise

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

我正在使用 Parse.com 来存储我的应用程序的数据,但目前我陷入了一些嵌套的 promise 。我对这个概念很陌生,我写道:

this.loadCategories = function() {
var global = ParseService.toAngularPromise(new Parse.Query(Categories).find());
global.then(function(categories){
return categories.forEach(function (category){
var criteriaPerCategory = ParseService.toAngularPromise(category.relation('relevantCriteria').query().find());
return criteriaPerCategory.then(function (allCriteriaPerCategory){
category._criteria = allCriteriaPerCategory;
});
});
});
return global;
};

它几乎可以工作......除了最后一个之外,所有 promise 都被执行:这应该在 View 加载到 Angular 之前调用,它基本上可以工作,除了行 category._criteria = allCriteriaPerCategory;创建 View 后调用,我不明白为什么。

我知道这种编写 Promise 的风格不是很学术,但由于这个列表,我没有找到任何更好的解决方案...我很高兴获得有关我的代码的一些见解!

ParseService 只是一个从普通 JS Promises 创建 Angular Promises 的服务。

最佳答案

你的循环只是将 promise 抛入风中,没有进行任何链接。您需要堆叠所有这些 promise ,然后检查所有这些 promise 何时完成。这可以通过 map$q.all 轻松完成。您只需要注入(inject)该依赖项即可。

this.loadCategories = function() {
var global = ParseService.toAngularPromise(new Parse.Query(Categories).find());
return global.then(function(categories){
return $q.all(categories.map(function (category){
var criteriaPerCategory = ParseService.toAngularPromise(category.relation('relevantCriteria').query().find());
return criteriaPerCategory.then(function (allCriteriaPerCategory){
category._criteria = allCriteriaPerCategory;
return category;
});
}));
});
};

关于javascript - 带列表的嵌套 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33104988/

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