使用AngularJS进行多个服务http调用

时间:2014-11-22 18:24:02

标签: 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(result) {
    console.log(result[0], result[1]);
    return result[0], result[1];
});

代码实际上在http请求成功完成时起作用。但是,我在控制器中遇到一个错误:TypeError:无法读取属性'然后'未定义的。我相信这是因为服务没有以正确的方式回复承诺。关于如何解决这个问题的任何想法都会受到高度赞赏吗?

1 个答案:

答案 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]);
}
  1. 您没有退回承诺,因此您的控制器中无法呼叫.then()
  2. 您将在.then()内的service.updateData()功能内返回,这对您来说并不是很重要。
  3. 如果您想在服务中控制所有内容并返回特定格式,请尝试以下操作:

    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;
    }