承诺没有回来

时间:2014-01-20 00:43:31

标签: javascript angularjs asynchronous sinatra promise

我承诺我认为应该有效,但事实并非如此。服务器返回200并且javascript接收数据而没有生成错误,但视图中的范围不会更新。我不确定什么是错的,因为我还是Angular承诺的新手。任何帮助都会很棒。感谢。

我有一个服务有两个方法处理http回调...

this.addresses = [];

this.getAddresses = function() {
  var deferred = $q.defer();

  addresses = [];

  $http({
    method: "GET",
    url: '/list_addresses'
  }).success(function(data, status, headers, config) {

      for (x = 0; x < data[':addresses'].length; x++) {
        address = {};

        address['balance'] = data[':addresses'][x][':balance'];

        address['address'] = data[':addresses'][x][':address'];

        address['label'] = data[':addresses'][x][':label'];

        address['total_received'] = data[':addresses'][x][':total_received'];

        addresses.push(address);
      }
      deferred.resolve(addresses);
    }).error(function(data, status, headers, config) {

      console.log(data)

    });

  return deferred.promise;
};

this.loadAccount = function() {
  this.getAddresses()
    .then(
     function(result){
       this.addresses = result;
  }, function(error){
       // error
  }, function(percentComplete){
  });
};

现在我的控制器中注入了上述服务

$scope.awesomeServiceIcreated = awesomeServiceIcreated;

$scope.loadAccount = function() {
  AwesomeServiceICreated.loadAccount();
};

$scope.$watch('awesomeServiceIcreated.addresses', function(newValue) {
  $scope.addresses = newValue;
});

在我的观点中

<button ng-click="loadAccount()">Click me</button>

<div>{{addresses}}</div>

1 个答案:

答案 0 :(得分:1)

请检查此问题:"this" inside an anonymous function?

此关键字在异步回调中丢失了它的上下文。

在异步回调console.log(this === window) // true

解决方案:

this.loadAccount = function() {
  var _this = this;
  this.getAddresses()
    .then(
     function(result){
       _this.addresses = result;
  }, function(error){
       // error
  }, function(percentComplete){
  });
};
相关问题