使用Angular的$ q服务时,承诺最终会自行超时吗?
一些背景:我有一个Angular服务向远程服务器发送POST,而远程服务器又查询MySQL数据库并且应该发回结果。有些查询会在一秒钟内返回,而其他查询则需要长达20分钟。问题是,在发送请求后的4分钟后,有一个net :: ERR_EMPTY_RESPONSE(在Chrome开发工具中)。
我们在服务中使用$ q和$ http来促进POST。
queryDB: function(query, page) {
var deferred = $q.defer();
$http.post(BASEPATH + "/filter", {data: query, page: page, token: localStorage.auth}, {timeout: 1200000})
.success(function(response) {
deferred.resolve(response);
})
.error(function(error) {
deferred.reject(error);
})
return deferred.promise;
}
这是承诺返回的控制器:
$scope.queryDB = function(page) {
var query = formatQuery($scope.query);
FilterService.queryDB(query, page).then(function(res) {
...
})
由于一些简单的测试记录,我知道呼叫到达服务器。但对我来说奇怪的是开发控制台指示the connection was always "stalled"并且从未到达过服务器。
同样,这只发生在超过4分钟的查询中,否则它会正常运行。所以我最好的猜测是Angular没有等待足够长的时间来解决/拒绝承诺。有没有办法改变这种行为?