【问题标题】:$q.all and creation of a new object not working in the view$q.all 和创建的新对象在视图中不起作用
【发布时间】:2014-02-24 21:31:19
【问题描述】:

$q.all 无法在 AngularJS 中解析,我遇到了困难。我可能没有正确描述事情,但这至少是场景。

服务

app.factory('myService', function($http){
    return {
        get: function () {
            return $http.get('http://localhost:8001/');
        }
    };
});

在控制器中

angular.forEach(array, function(item){
    promises.push({foo:myService.get(), bar: item});
});
$q.all(promises).then(function(results){
    $log.info(results);
    $scope.results = results;
});

在视图中,从bar 获取值的任何内容都会正确显示。但是,任何从 foo 获取其值的内容都是空白的。在控制台中,bar 是您所期望的可检查对象。但是foo 仍然是一个承诺。它具有承诺的所有方法,但没有关联数据。

因此,不知何故,当结果应用于$scope 时,$q.all 并没有得到解决。为什么,我不确定。

我会注意到,我在上面所做的事情是基于这里的内容:angular.forEach and objects

【问题讨论】:

    标签: angularjs promise q


    【解决方案1】:

    你能做一个plnkr吗?此外,您的“承诺”数组不是承诺,而是一个自定义对象,其中一个属性是承诺,另一个是其他属性。如果你想做一个 promise 散列,它应该是这样的:

    var promises = {};
    angular.forEach(array, function(item){
        promises[item.foo] = item.promise;
    });
    
    $q.all(promises).then(...
    

    【讨论】:

      【解决方案2】:

      $q.all 期待一系列承诺。试试这样的:

      angular.forEach(array, function(item){
          var foo = myService.get();
          var bar = myOtherService.get();
          promises.push(foo); 
          promises.push(bar);  
      });
      
      $q.all(promises).then(function(results){
          $log.info(foo);
          $log.info(bar); 
      });
      

      更新

      如果需要,可以嵌套多个 $q.all

      angular.forEach(array, function(item){
      
          var deferred = $q.defer();
      
          $q.all([myService.get(), myOtherService.get()]).then(function(results){
            deferred.resolve({foo:results[0], bar: results[1]});
          });  
      
          promises.push(deferred.promise);
      
      });
      
      $q.all(promises).then(function(results){
          $log.info(results);
      });
      

      【讨论】:

      • 这行得通,但不是我需要的。这将创建八个对象,而不是四个具有两个内部对象的对象。
      • 检查更新的答案。您可以嵌套多个 $q.all 以提供所需的格式
      • 做到了! (在.promise;); 的更新中有一个无关的;但编辑不会让我一次只修复一个字符)
      • 小错字,我删除了多余的分号
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      相关资源
      最近更新 更多