我正在使用Angular 1.6.3
我需要提出3个请求,最后检查是否至少有一个成功响应。现在我写了这段代码:
var result = new Array();
$http.get("link1",
{
"params": {
"email": user.email,
}
}).then(function (successResult) {
result[0] = false;
}, function (errorResult) {
result[0] = true;
});
$http.get("link2",
{
"params": {
"email": user.email,
}
}).then(function (successResult) {
result[1] = false;
}, function (errorResult) {
result[1] = true;
});
$http.get("link3",
{
"params": {
"email": user.email,
}
}).then(function (successResult) {
result[2] = false;
}, function (errorResult) {
result[2] = true;
});
if(result[0] || result[1] || result[2]){
error();
}
但有时,GET
个请求中的一个会在-1
提供200
作为Http状态代码时返回$http
。我知道所有<%= image_tag listing.listing_property_details.images.first, class: "fancy-border" %>
请求都是异步的,我认为这是主要原因。解决这个问题的正确方法是什么?
答案 0 :(得分:2)
这样做的正确方法是使用$ q.all
使用以下代码。
var promise1 = $http.get("link1",
{
"params": {
"email": user.email,
}
});
var promise2 = $http.get("link2",
{
"params": {
"email": user.email,
}
});
var promise3 = $http.get("link3",
{
"params": {
"email": user.email,
}
});
$q.all([
promise1,
promise2,
promise3
]).then(function(data)
{
// data[0] contains the response of the promise1 call
// data[1] contains the promise2 response
// data[2] contains the promise3 response.
$scope.variable = data;
},
function(errorData){
});
答案 1 :(得分:1)
你可以像这样使用
var result = new Array();
$http.get("link1",
{
"params": {
"email": user.email,
}
}).then(function (successResult) {
result[0] = false;
}, function (errorResult) {
result[0] = true;
}).then($http.get("link2",
{
"params": {
"email": user.email,
}
}).then(function (successResult) {
result[1] = false;
}, function (errorResult) {
result[1] = true;
})).then(
$http.get("link3",
{
"params": {
"email": user.email,
}
}).then(function (successResult) {
result[2] = false;
}, function (errorResult) {
result[2] = true;
}));
但是这里有一个更好的方法是与诺言打电话 这是官方网站的链接
答案 2 :(得分:0)
由于HTTP请求的异步性质,您可以更好地正确使用promises。我建议Promise.all()可以在收到回复后检查回复的状态。
或者,您可以使用函数检查每个响应是否到达(而不是等待所有承诺解析)。
例如:
checkResponse(res) {
// logic here
}
$http.get('xxx').then(res => checkResponse(res))
$http.get('yyy').then(res => checkResponse(res))
$http.get('zzz').then(res => checkResponse(res))