[英]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.