在我的控制器中,我使用以下代码调用服务:
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:无法读取属性'然后'未定义的。我相信这是因为服务没有以正确的方式回复承诺。关于如何解决这个问题的任何想法都会受到高度赞赏吗?
答案 0 :(得分:1)
看起来你没有在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()
内的service.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;
}