繁体   English   中英

如何正确承诺(角度)

[英]How to promise correctly ( Angular )

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

我为什么这样做:第一个端点在我的控制之下,但第二个端点是一些旧的且运行缓慢的WS,我想向用户显示其数据至少与端点不相关,并在之后添加其余数据

  • 第一个端点-花费大约45毫秒的时间来获取响应-getData()
  • 第2个端点-接收出现问题,大约需要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网络时,说使用它需要45毫秒(如上所述)此findCases并在浏览器中调用两个网络选项卡,说2,7s getData和45 ms getSoapData

我希望我没有正确地履行诺言,或者我做了其他la脚的谜团,但是找不到它。 知道我做错了什么吗?

您确定要正确解释网络数据吗? 除了您不确定为什么不异步调用两个端点之外,我的承诺没有其他问题。

这不是更可取的:

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

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

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

这样,可以同时进行两个呼叫,从而避免等待第一个呼叫解决,从而使您更快地响应您的肥皂呼叫。

您可以合并promise,以便它们可以并行运行,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM