跳到主要内容
CNode

在使用mongoose和request时,运行了一段时候后出现RangeError:maximum call stack size exceeded

问答
BBen07发布于 11 年前
029680

写的是一个网络爬虫,250ms一次请求一个网页并处理数据。用的是coffeescript

funcA  = async.queue (task,callback)->\n  Proxy.findOne {_id:task.id},(err,proxy)->
	//处理下proxy
	proxy.save (err)->
		callback()
,10
funcB = async.queue (task,callback)->
Product.findOneAndUpdate {productId:task.productId},task,{upsert:true},(err,result)->
	callback()
,10


funcC = async.queue (task,callback)->
	request {uri:task.url,proxy:task.proxy,timeout:5000},(error,response,body)->
		if !error and response.statusCode is 200
			//这里是处理html,把想要的数据存到对象model中
			funcB.push model
			funA.push {id:task.id}

setInterval ->
	url = urls.pop()
	proxy = proxies.pop()
	funcC.push {url:url,proxy:proxy}
,250

上面这段代码运行个几分钟就会抛出RangeError:maximum call stack size exceeded。 我也试过setImmediate(callback),但是还是会遇到这个问题。 我google了很多。有些说是循环调用方法,或者callback过多,但是我用了async.queue。难道不起效果吗? 谢谢。

查看回复

回复 (0)

暂无回复,成为第一个参与讨论的人。

参与回复

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