2016-01-08 61 views
1

我爲我寫了一個簡單的承諾。兩者幾乎相同,都調用HTTP GET。如何正確承諾(角度)

爲什麼我做到了: 第一個端點是我CONTROLE下,但第二個是一些老又慢WS,我想從我的終點instatly ATLEAST顯示用戶自己的數據,只是後面添加數據的其餘

  • 1號終點 - 以各地45ms秒獲得響應 - 的getData()
  • 二路終點 - 以是有問題的,並需要大約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網絡說它需要45ms以上,當我用這個findCases並調用瀏覽器兩個網絡選項卡,提到說2,7s getData和45毫秒getSoapData

我希望我沒有正確地創建我的承諾或我做了一些其他的跛mystake,但無法找到它是什麼。 任何想法我做錯了什麼?

+0

在findCases尋找功能getSoapData無處依靠的getData。你爲什麼不想鎖鏈? –

回答

1

您確定要正確解釋網絡數據嗎?我沒有看到你的承諾有什麼問題,除了我不確定你爲什麼不是異步調用兩個端點。

這是不是可取:

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

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

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

這樣兩個呼叫都在同一時間做出讓你避免了等待第一個電話解決您的SOAP調用更快的響應。

0

您可以結合諾言所以他們會並行運行,像這樣:

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

這意味着整個鏈需要在顯示任何數據之前解決,這正是OP想要避免的。 –