Javascript 使用AngularJS的多个服务http调用
在控制器中,我使用以下代码调用服务:Javascript 使用AngularJS的多个服务http调用,javascript,angularjs,Javascript,Angularjs,在控制器中,我使用以下代码调用服务: Service.updateData(data).then(function (result) { console.log(result); }); 在我的服务中,我使用$q来获取多个HTTP请求 $rootScope.http_1 = $http.get(); $rootScope.http_2 = $http.get(); $q.all([$rootScope.http_1, $rootScope.http_2]).then(function(r
Service.updateData(data).then(function (result) {
console.log(result);
});
在我的服务中,我使用$q来获取多个HTTP请求
$rootScope.http_1 = $http.get();
$rootScope.http_2 = $http.get();
$q.all([$rootScope.http_1, $rootScope.http_2]).then(function(result) {
console.log(result[0], result[1]);
return result[0], result[1];
});
当http请求成功发出时,代码实际上起作用。然而,我在控制器中得到一个错误,它说:TypeError:无法读取未定义的属性'then'。我相信这是由于服务没有以正确的方式返回承诺。如果您有任何关于如何解决此问题的想法,我们将不胜感激。您似乎没有在
updateData
中返回承诺,请尝试以下方法:
updateData = function(data) {
$rootScope.http_1 = $http.get();
$rootScope.http_2 = $http.get();
return $q.all([$rootScope.http_1, $rootScope.http_2]);
}
。then()
服务中返回.then()
函数。updateData()
,这对您没有多大帮助updateData = function(data) {
$rootScope.http_1 = $http.get();
$rootScope.http_2 = $http.get();
var defer = $q.defer();
$q.all([$rootScope.http_1, $rootScope.http_2]).then(function(result){
// process here to get the data how you want it, say in some new var foo
var foo = "some processed data based on result";
defer.resolve(foo);
});
return defer.promise;
}
updateData
返回什么?另外,我不知道如何使用then
回调函数的结果,因此我真的找不到return
在那里的任何用途(而且它在任何情况下都写错了)。最后,为什么要用它们装饰$rootScope
,而不使用局部变量呢?当我得到一个JS错误时,它不会返回任何东西。但HTTP调用确实有效,因为我可以从服务在控制台中看到结果[0]&结果[1]。关于如何调整控制器中的代码以将结果[0]结果[1]返回控制器,您有什么想法吗?谢谢deitch。我想把它保持在一个服务范围内。然而,当我将你的第二位代码与我的控制器代码一起使用时,我得到了一个新的错误:TypeError:undefined不是一个函数(这指向控制器上的then)。向延迟添加.PROMITE使其工作。再次感谢返回defer.promise哦,是的,我真邋遢!我一直使用return delay.promise
。对不起。:-)