Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AngularJS的多个服务http调用_Javascript_Angularjs - Fatal编程技术网

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.promisereturn delay.promise
    。对不起。:-)