CNode

http.get 怎么捕获timeout(网络超时)事件?

问答
Aa316523235发布于11 年前最后回复11 年前9 回复11397 浏览0 收藏

平时是这样

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)

A
a316523235#1·11 年前

主要就是想捕获到超时,以便做相关的处理

J
jiangliqin#2·11 年前

参考response.setTimeout()啊

H
hustxiaoc#3·11 年前
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!');
});
A
a316523235#4·11 年前
引用 hustxiaoc

@hustxiaoc 3Q

M
magicdawn#5·11 年前

大概是这样吧~

req.on('error', function(err){
  if(err.code === 'ETIMEOUT'){
    // blabla
  }
})
M
magicdawn#6·11 年前

貌似不是我想的这样

应该是

  1. req.setTimeout, 然后实际是 socket.setTimeout, see https://nodejs.org/dist/latest-v4.x/docs/api/http.html#http_request_settimeout_timeout_callback
  2. 为 socket 监听 timeout 事件 see
req.setTimeout(3000);
req.on('socket', function(socket){
  socket.on('timeout', function(){
    // timeout exceed
  });
});
M
magicdawn#7·11 年前
A
a316523235#8·11 年前

好像大家都理解错了, 我是做的一个爬虫, 要监听的是爬虫超时的事件, 是要监听req的。

A
a316523235#9·11 年前

功能已经成功完成,谢谢以上各位给予的帮助

参与回复
登录后即可参与回复。登录