我是角色的新手,在应用程序中我正在编写用于执行REST API调用的角度服务。
我正在做的事情如下:
App.service('dataService', function(){
this.getNewsAndTweets = function(){
var newsCall = $http({
method: 'GET',
url: '/api/news/'
});
var tweetsCall = $http({
method: 'GET',
url: '/api/tweets/'
});
$q.all(newsCall, tweetsCall).then(function(values) {
var news = values[0].data.results;
var tweets = values[1].data.results;
var a = doSomeThing(news);
var b = doSomeThingToo(tweets);
return [a, b];
});
}
}
由于$q.all(newsCall, tweetsCall).then
是一个异步调用,当我调用我的服务时,我在新闻中获得了null数组。
在我的控制器中,我调用它像dataService.getNewsAndTweets()
并获取空数组,据我所知,$ q是一个异步调用,后来会返回数据。
如何解决此问题?
提前致谢。
答案 0 :(得分:1)
您必须在服务中退回承诺
return $q.all(newsCall, tweetsCall).then(function(values) {
var news = values[0].data.results;
var tweets = values[1].data.results;
var a = doSomeThing(news);
var b = doSomeThingToo(tweets);
return [a, b];
});
然后在您的控制器中等待它解决:
dataService.getNewsAndTweets().then(function(data){
$scope.news = data[0];
$scope.tweets = data[0];
});