http.get 怎么捕获timeout(网络超时)事件?
平时是这样
http.get(indexUrl, function(res) {
var body = [];
res.on('data', function(chunk) {
body.push(chunk);
});
res.on('end', function(chunk) {
//todo
});
//问题在这里
res.on('什么' 能捕获到timeou(超时)
});
9 回复
主要就是想捕获到超时,以便做相关的处理
参考response.setTimeout()啊
http.get(indexUrl, function(res) {
var body = [];
res.on('data', function(chunk) {
body.push(chunk);
});
res.on('end', function(chunk) {
//todo
});
//问题在这里
res.on('什么' 能捕获到timeou(超时)
}).setTimeout(1000, function(){
console.log('timeout!');
});
@hustxiaoc 3Q
大概是这样吧~
req.on('error', function(err){
if(err.code === 'ETIMEOUT'){
// blabla
}
})
哦~貌似不是我想的这样~
应该是
- req.setTimeout, 然后实际是 socket.setTimeout, see https://nodejs.org/dist/latest-v4.x/docs/api/http.html#http_request_settimeout_timeout_callback
- 为 socket 监听 timeout 事件 see
req.setTimeout(3000);
req.on('socket', function(socket){
socket.on('timeout', function(){
// timeout exceed
});
});
superagent 是直接不管request的结果, 在 library code 里处理超时 see
好像大家都理解错了, 我是做的一个爬虫, 要监听的是爬虫超时的事件, 是要监听req的。
功能已经成功完成,谢谢以上各位给予的帮助