[英]How to promise correctly ( Angular )
我為我寫了一個簡單的承諾。 兩者幾乎相同,都調用HTTP GET。
我為什么這樣做:第一個端點在我的控制之下,但第二個端點是一些舊的且運行緩慢的WS,我想向用戶顯示其數據至少與端點不相關,並在之后添加其余數據
我是怎么做到的:
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.