AngularJS控制器在服务之前执行console.log()

时间:2016-06-29 10:07:53

标签: javascript angularjs node.js mean-stack

我正在开发M.E.A.N堆栈中的应用程序。我正在使用角度控制器(来自指令)和服务。控制器调用服务,服务向NodeJS发送GET请求并获得结果。然后我将结果记录在服务中,然后获取数据。

问题是控制器还会在控制器获得结果之前记录服务。

在services.js中:

this.contacts = contactsSrv.show();
console.log(this.contacts);

在directives.js中:

contactsSrv.show()

这就是我在控制台中看到的: When Applying Filter

(指令在从contactsSrv.show()获得结果之前记录)

如何使{{1}}异步?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用.then作为承诺返回

service.js

var self = this;
self.show = function() {
    return $http.get('/contactlist');
};

directive.js

contactsSrv.show()
    .then(function (response) {
        console.log(response);
        this.contacts = response;
    });

答案 1 :(得分:1)

$http.get替换为$http.jsonp,因为我需要从ouside stackoverflow中检索一些数据。

success替换为then方法 - 这样您就可以将结果链接到控制器/运行部分。

angular.module('app', [])
  .service('contactsSrv', function($http) {
    this.show = function() {
      return $http.jsonp('//public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK').then(function(response) {
        return response.data;
      });
    }
  }).run(function(contactsSrv) {
    contactsSrv.show().then(function(r) {
      console.log('found posts', r.found)
    })
  })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app='app'>
</div>