【问题标题】:Getting data from Angular Promise从 Angular Promise 获取数据
【发布时间】:2013-10-29 09:22:20
【问题描述】:

我正在尝试将MotorRestangular.all('Motors').getList() 的响应分配给变量a,以便以后可以使用它。问题是如果我尝试在我的return 函数中访问a,它是未定义的。我知道这不是完成我需要的正确方法,但我不知道如何以任何其他方式做到这一点。

myApp.factory('Configurations', function(Restangular, MotorRestangular) {
  var a;
  var Motors = function() {
    MotorRestangular.all('Motors').getList().then(function(Motors){
      a = Motors;
    }); 
  }



  return {
    config: function(){
      Motors();
      console.log(a);
      var g = _.groupBy(Motors, 'configuration');
      console.log(g);
      var mapped = _.map(g, function(m) {
        return {

            id: m[0].configuration,
            configuration: m[0].configuration,
            sizes: _.map(m, function(a) {return a.sizeMm})
      }});
    }
  }

});

【问题讨论】:

    标签: javascript angularjs promise restangular


    【解决方案1】:

    我刚刚解决了这个问题。发生的事情是config:a 被填充之前返回。下面的代码有效。

    myApp.factory('Configurations', function(Restangular, MotorRestangular, $q) {
      var getConfigurations = function(){
        var deferred = $q.defer();
    
        MotorRestangular.all('Motors').getList().then(function(Motors){
          //Group by Cofig
          var g = _.groupBy(Motors, 'configuration');
          //Map values
          var mapped = _.map(g, function(m) {
            return {
                id: m[0].configuration,
                configuration: m[0].configuration,
                sizes: _.map(m, function(a) {return a.sizeMm})
          }});
          deferred.resolve(mapped);
        });
        return deferred.promise;
      };
    
      return {
        config: getConfigurations()
      }
    
    });
    

    【讨论】:

      【解决方案2】:

      请不要使用延迟对象。如果您在 your answer 中的内容有效 - 那么这也有效:

      myApp.factory('Configurations', function (Restangular, MotorRestangular, $q) {
          var getConfigurations = function () {
              return MotorRestangular.all('Motors').getList().then(function (Motors) {
                  //Group by Cofig
                  var g = _.groupBy(Motors, 'configuration');
                  //Map values
                  return _.map(g, function (m) {
                      return {
                          id: m[0].configuration,
                          configuration: m[0].configuration,
                          sizes: _.map(m, function (a) {
                              return a.sizeMm
                          })
                      }
                  });
              });
          };
      
          return {
              config: getConfigurations()
          }
      
      });
      

      此外,如果发生错误,返回的 Promise 不会永远挂起。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        • 2016-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多