Javascript 如何正确承诺(角度)
我为自己写了一个简单的承诺。两者几乎相同,调用HTTP GET 我为什么这么做: 第一个端点在我的控制之下,但第二个端点是一些陈旧而缓慢的WS,我希望至少从我的端点不稳定地显示用户的数据,然后添加其余的数据Javascript 如何正确承诺(角度),javascript,angularjs,Javascript,Angularjs,我为自己写了一个简单的承诺。两者几乎相同,调用HTTP GET 我为什么这么做: 第一个端点在我的控制之下,但第二个端点是一些陈旧而缓慢的WS,我希望至少从我的端点不稳定地显示用户的数据,然后添加其余的数据 第1个端点-大约需要45毫秒秒才能获得响应-getData() 2端点-Take有问题,大约需要2,5-3秒-getSoapData() 我是如何做到的: function getData() { var myPromise = $http({
- 第1个端点-大约需要45毫秒秒才能获得响应-getData()
- 2端点-Take有问题,大约需要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
网络时,说我使用这个findCases
并调用浏览器中的两个网络选项卡时,如上所述需要45毫秒,说2,7秒getData
和45毫秒getSoapData
我想我没有正确地创造我的承诺,或者我做了其他一些蹩脚的事情,但找不到是什么。
知道我做错了什么吗?你确定你正确解释了网络数据吗。除了我不确定为什么不异步调用两个端点之外,我认为您的承诺没有任何错误 这不是更好吗:
function displayData(result) {
$scope.cases = result.data;
}
function displaySoap(result) {
$scope.soapCases = result.data;
}
$scope.findCases = function() {
getData().then(displayData);
getSoapData().then(displaySoap);
}
通过这种方式,两个调用可以同时进行,从而避免等待第一个调用解决,从而为您的soap调用提供更快的响应。您可以组合承诺,使它们并行运行,如下所示:
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;
});
查看findCases函数getSoapData并不依赖于getData。为什么你不想链接它们?这意味着在显示任何数据之前,整个链接都需要解析,这正是OP想要避免的。