我正在开发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}}异步?
谢谢!
答案 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>