javascript - 带列表的嵌套 Promise

标签 javascript angularjs parse-platform promise

我正在使用 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/

相关文章:

javascript - HTML5 Web 存储 - 存储 JSON 数据然后检索它

javascript - 将变量传递给 setInterval 函数

javascript - 基于字符比较字符串

javascript - Angular 嵌套指令

android - 您必须使用 ParseObject.create() 或适当的子类创建这种类型的 ParseObject。 - 应用程序崩溃但代码正确

javascript - 跨站点嵌入 Web 控件 - 使用 IFrame/Javascript

javascript - Angular 改变个人值(value)会改变全局值(value)

security - 使用 OAuth 和不记名 token 将用户角色从 ASP.NET Identity 返回到 AngularJS 应用程序

java - 在 ParseObject 上保存 2D 数组

java - Android解析查询2个类