簡體   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