Javascript 如何处理;“随机HTTP获取”;错误
我需要一个接一个地发送多个get请求(必需)。当计数为2-3时,它可以正常工作,但对于几乎6个HTTP Get请求,有时其中一些请求会失败并给出Javascript 如何处理;“随机HTTP获取”;错误,javascript,angularjs,http,get,http-get,Javascript,Angularjs,Http,Get,Http Get,我需要一个接一个地发送多个get请求(必需)。当计数为2-3时,它可以正常工作,但对于几乎6个HTTP Get请求,有时其中一些请求会失败并给出内部服务器错误(500)。在“新建”选项卡中打开“错误”链接将提供所需的结果 所以服务器端并没有什么问题 我在:localhost和production中都面临着这个问题。 如何从客户端处理这种情况 我试过: NodeJS+SocketIO无需请求即可从服务器发送数据。[如果套接字一直写入到60秒,那么会有如此多的数据。套接字从一开始就重新注册并重新启动
内部服务器错误(500)
。在“新建”选项卡中打开“错误”链接将提供所需的结果
所以服务器端并没有什么问题
我在:localhost
和production
中都面临着这个问题。
如何从客户端处理这种情况
我试过:
NodeJS+SocketIO
无需请求即可从服务器发送数据。[如果套接字一直写入到60秒,那么会有如此多的数据。套接字从一开始就重新注册并重新启动。]Angular+NGResource
。[内部使用http get。问题仍然存在。]角度+重新角度库
。[内部使用http get。问题仍然存在。]Thnx 这里有一个函数,您可以在其中包装HTTP调用。它将重复呼叫,直到通过。当心!如果HTTP调用在100%的时间内失败(例如,错误的URL),那么函数将不会停止(在测试中,函数被调用了>70000次。显然,承诺没有递归限制)。对于这种情况,我提供了一个有限版本的函数,它在n次尝试后停止
var persistentRequest = function(requestFn) {
var deferred = $q.defer();
requestFn().then(function() {
deferred.resolve();
}, function() {
persistentRequest(requestFn).then(
function() {
deferred.resolve();
}
);
});
return deferred.promise;
}
var persistentRequestLimited = function(requestFn, n) {
var deferred = $q.defer();
if (n <= 0) {
deferred.reject('Did not complete in given number of tries');
} else {
requestFn().then(function(data) {
deferred.resolve(data);
}, function() {
persistentRequestLimited(requestFn, n-1).then(
function(data) {
deferred.resolve(data);
},
function(rejection) {
deferred.reject(rejection);
}
);
});
}
return deferred.promise;
}
不要忘记将$q注入控制器/服务等。可能您的服务器不允许6个并发连接到同一个客户端…如果是这样的话。。。它决不允许这样。问题是:它有时工作,有时工作。失败,有时3失败…修复服务器。听起来好像坏了。服务器有问题吗?我不这么认为。线索是什么?答案似乎不错。我试过这样的东西。HTTP get出错时,我对请求进行了“n”次迭代。如果我能找到问题发生的原因,而不是找到解决方案,我会很高兴。你能帮我找到吗?你运行服务器吗?我同意Adam Batkin的观点,这听起来像是一个服务器问题,因为你可以重复请求,而且它可以工作。是的!我正在运行服务器。嗯,上面说:500(内部服务器错误),所以亚当的观点可能会触动神经。但我怎么知道什么坏了。细节:这是一个处理简单脚手架的rails服务器。
persistentRequest(function() {
return $http.get('/myurl');
});
persistentRequestLimited(function() {
return $http.get('/myurl');
}, 10);