$ q.all(promises)和promises对象的结构来收集返回的数据

时间:2015-04-09 01:17:00

标签: angularjs angularjs-resource

我使用Angularjs $q.all(promises)进行多次REST调用,然后在promise成功后收集数据。我有以下内容。

  1. 如果" promises是简单数组,那么它就可以Plunker

    var promises = [
       Users.query().$promise,
       Repositories.query().$promise
    ];
    
  2. 如果"承诺"是简单的对象,然后它也有效Plunker

    var promises = {
       users: Users.query().$promise,
       repos: Repositories.query().$promise
    };
    
  3. 如果"承诺"是嵌套对象然后它不起作用。对于我的要求,我需要嵌套对象来记住输入参数。 Plunker

    var promises = {
       users: {"phx":Users.query().$promise},
       repos: {"phx":Repositories.query().$promise}
    };
    
  4. 这些plunkr只是为了模拟我的问题。但是我想在实际项目中采用这种方法来满足以下要求。

      
        
    1. 我有12个产品的清单

    2.   
    3. 每个产品都有"详细信息","好处"和"提供"数据

    4.   
    5. 我为"详细信息","好处"提供了单独的REST API服务。和"提供"拥有:productID作为参数
    6.   
    7. 我按照以下顺序拨打电话

           

      一个。每张卡的循环

           

      湾对于每张卡,请为"详细信息","好处"进行REST API调用。和"提供"

           

      ℃。将#b步骤添加到" promises"对象

           

      d。调用

      $q.all(promises).then(function(results) {
          // Here need logic to compile the result back to product 
          // and corresponding  "details", "benefits" and "offers" mapping
        } 
      
           

      并获取数据

    8.   

    以下是json结构,我需要收集我的回复。

    {
        "prod1": {
          "benefits": {},
          "offers": {},
          "pages": {
            "productPage": {}
          }
        }
      },
      "common": {
        "benefits": {},
        "pages": {
          "commonBenefit": {}
        },
        "others": {}
      }
    

    我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

如果你确实需要它,你可以用$q.all包裹这样的巢:

var promises = {
  users: $q.all({"phx": Users.query().$promise}),
  repos: $q.all({"phx": Repositories.query().$promise})
};

plnkr.co