【发布时间】:2015-09-24 07:48:21
【问题描述】:
所以,我正在向服务器发出这个请求,我设置了一个超时,我想处理超时事件,但我也想处理“中止”事件,并且彼此不同。我设法通过快速修复来做到这一点,但我想知道是否有更好的方法来做到这一点。代码如下所示:
makeRequest = function(json, cb){
var requestError
request({
url: REQUEST_URL,
json: json,
timeout: 3000,
headers: {
'Content-Type': 'application/json'
}
}, function(err, res, body){
if(err) requestError = err
else cb(null, res, body)
}).on('abort', function(){
setTimeout(function({
if(requestError != 'ETIMEDOUT') cb(httpStatusCode.REQUEST_TIMEDOUT)
else cb(httpStatusCode.REQUEST_ABORTED
}, 1000)
})
}
我注意到在超时事件中触发了“中止”事件并按此顺序调用请求回调,因此我使用 setTimeout 函数等待请求回调,然后处理“中止”中的错误'听众。这似乎是一种愚蠢的方法,我在网上搜索并没有找到只处理回调事件的方法。我还注意到超时触发了 on.('error', function(err){}) 事件,我可以在其中处理错误,但它也调用 on.('abort', function(){}) 事件我最终调用了主回调 (cb) 两次,导致我的应用程序崩溃。
有没有一种方法可以让我只为超时设置一个事件,而为一个中止设置一个事件,这样我就不必使用 setTimeout?
或者我的 req 对象中是否有任何属性可以检查该请求是否超时?
或者您有什么其他建议可以以一种不那么难看的方式解决我的问题吗?
我正在使用 nodejs 0.12.2 并请求 2.55.0 谢谢!
【问题讨论】:
-
如果我错了请纠正我,但不是因为超时而中止吗?
标签: javascript node.js request timeout