使用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; }
这是promise返回的控制器:
$scope.queryDB = function(page) { var query = formatQuery($scope.query); FilterService.queryDB(query, page).then(function(res) { ... })
由于一些简单的测试记录,我知道呼叫到达服务器.但对我来说奇怪的是开发控制台表明连接始终"停滞"并且从未首先到达服务器.
同样,这只发生在超过4分钟的查询中,否则它会正常运行.所以我最好的猜测是Angular没有等待足够长的时间来解决/拒绝承诺.有没有办法改变这种行为?