Javascript 如何正确承诺(角度)

Javascript 如何正确承诺(角度),javascript,angularjs,Javascript,Angularjs,我为自己写了一个简单的承诺。两者几乎相同,调用HTTP GET 我为什么这么做: 第一个端点在我的控制之下,但第二个端点是一些陈旧而缓慢的WS,我希望至少从我的端点不稳定地显示用户的数据,然后添加其余的数据 第1个端点-大约需要45毫秒秒才能获得响应-getData() 2端点-Take有问题,大约需要2,5-3秒-getSoapData() 我是如何做到的: function getData() { var myPromise = $http({

我为自己写了一个简单的承诺。两者几乎相同,调用HTTP GET

我为什么这么做: 第一个端点在我的控制之下,但第二个端点是一些陈旧而缓慢的WS,我希望至少从我的端点不稳定地显示用户的数据,然后添加其余的数据

  • 第1个端点-大约需要45毫秒秒才能获得响应-getData()
  • 2端点-Take有问题,大约需要2,5-3秒-getSoapData()
我是如何做到的:

 function getData() {
        var myPromise = $http({
            method: 'GET',
            url: 'URL' + $scope.vin,
            headers: {Authorization: 'TOKEN'}
        });
        return myPromise;
    };

    function getSoapData() {
        var myPromise = $http({
            method: 'GET',
            url: 'URL=' + $scope.vin,
            headers: {Authorization: 'TOKEN'}
        });
        return myPromise;
    };

    $scope.findCases = function () {
        getData().then(function (data) {
            $scope.cases = data.data;
            getSoapData().then(function (soapData) {
                $scope.soapCases = soapData.data;
            });
        });
    };
问题出在哪里: 不知何故,我在我的应用程序中看到了这一承诺,因为它首先显示来自getData的结果,然后显示来自getSoapData的结果,但我对时间有问题: 当我只查询
getData
网络时,说我使用这个
findCases
并调用浏览器中的两个网络选项卡时,如上所述需要45毫秒,说2,7秒
getData
和45毫秒
getSoapData

我想我没有正确地创造我的承诺,或者我做了其他一些蹩脚的事情,但找不到是什么。
知道我做错了什么吗?

你确定你正确解释了网络数据吗。除了我不确定为什么不异步调用两个端点之外,我认为您的承诺没有任何错误

这不是更好吗:

function displayData(result) {
    $scope.cases = result.data;
}

function displaySoap(result) {
    $scope.soapCases = result.data;
}

$scope.findCases = function() {
    getData().then(displayData);
    getSoapData().then(displaySoap);
}

通过这种方式,两个调用可以同时进行,从而避免等待第一个调用解决,从而为您的soap调用提供更快的响应。

您可以组合承诺,使它们并行运行,如下所示:

var promise1 = $http({
    method: 'GET',
    url: 'URL' + $scope.vin,
    headers: {Authorization: 'TOKEN'}
});
var promise2 = $http({
    method: 'GET',
    url: 'URL=' + $scope.vin,
    headers: {Authorization: 'TOKEN'}
});

$q.all([promise1, promise2]).then(function(data){
  $scope.cases = data[0].data;
  $scope.soapCases = data[1].data;
});

查看findCases函数getSoapData并不依赖于getData。为什么你不想链接它们?这意味着在显示任何数据之前,整个链接都需要解析,这正是OP想要避免的。