【发布时间】:2016-09-01 08:20:27
【问题描述】:
我向我的服务器 js 发布了一个 id,它执行的操作可能需要大约一分钟或更长时间。我认为在等待响应和再次 POST 时连接超时。我希望客户端或浏览器等到执行完成后再返回响应,这是长时间执行的结果。
我在网上看到了一些关于承诺的问题。我使用了承诺,但它仍然再次发布。还有其他解决方案吗?
代码:
$scope.imageget = function(target) {
$http.post('/' + 'region/images', {under: id})
.then(function(docs) {
$scope.results = docs.data.results;
var responss = docs.data.results;
var jsonresponse = JSON.parse(responss);
jobdetails = jsonresponse;
console.log(jobdetails)
});
};
承诺后的代码:
$scope.imageget = function(target) {
var deferred= $q.defer();
$timeout(function(){
$http.post('/' + 'region/images', {under: id})
.then(function(docs) {
$scope.results = docs.data.results;
var responss = docs.data.results;
var jsonresponse = JSON.parse(responss);
jobdetails = jsonresponse;
console.log(jobdetails)
});
deferred.resolve();
}, 3000);
return deferred.promise;
};
【问题讨论】:
-
使用promises并不能解决连接超时问题。
-
“它再次发帖”是什么意思?请不要只是想,而是确认使用开发者工具的网络面板连接超时。
-
请求再次发送。当我在立即发送请求后做出响应时,它会继续正确执行,但我当然想要反馈给我的客户,这取决于正在执行的内容。
-
您应该考虑以其他方式处理您的问题。您的服务器只能同时处理有限数量的连接。您的服务器应直接以“OK”响应,然后使用后台服务进行处理。下一步是从您的客户端进行一些拉取操作(每 x 秒检查一次状态),或者使用服务器中的 webSockets 通知客户端该作业已完成。
-
@DeblatonJean-Philippe 是的,我认为这是至少回馈进展的解决方案。
标签: javascript angularjs promise httpresponse