Javascript angularjs:使用来自两个http请求的变量

Javascript angularjs:使用来自两个http请求的变量,javascript,angularjs,Javascript,Angularjs,我想使用来自两个http请求的变量。我尝试使用rootScope,但它不起作用dlon和dlat仍未定义。这是代码 var app = angular.module('myApp', []); app.controller('customersCtrl', function($scope,$rootScope, $http) { $http.get("http://api.zippopotam.us/us/68503") .then(function (response) {

我想使用来自两个http请求的变量。我尝试使用rootScope,但它不起作用
dlon
dlat
仍未定义。这是代码

var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope,$rootScope, $http) {
    $http.get("http://api.zippopotam.us/us/68503")
      .then(function (response) {
        $rootScope.lon1 = response.data.places[0].longitude;
        $rootScope.lat1 = response.data.places[0].latitude;
    });
    $http.get("http://api.zippopotam.us/us/68504")
      .then(function (response) {
        $rootScope.lon2 = response.data.places[0].longitude;
        $rootScope.lat2 = response.data.places[0].latitude;
    });
    $scope.dlon = $rootScope.lon1 - $rootScope.lon2;
    $scope.dlat = $rootScope.lat1 - $rootScope.lat2;
});

谢谢。

您需要使用一个承诺,该承诺将在两个http请求完成后解决。在angular中,这是用$q完成的。

我很好奇promise解决方案将如何工作

var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope,$rootScope, $http, $q) {
  $q.all([
    $http.get("http://api.zippopotam.us/us/68503"),
    $http.get("http://api.zippopotam.us/us/68504")
  ]).then((a) =>{
    $scope.dlon = a[0].data.places[0].longitude - a[1].data.places[0].longitude;
    $scope.dlat = a[0].data.places[0].latitude - a[1].data.places[0].latitude;
  })
});

您的scope.dlon和scope.dlat在http.get.I结束之前就已经初始化了,chrome很好用,但在safari中,AngularJS不知何故不起作用。我不知道为什么您可能不想使用箭头函数语法,它在ES6中是新的,并且不是所有地方都支持。使用
函数(a){…}