在使用mongoose和request时,运行了一段时候后出现RangeError:maximum call stack size exceeded
发布于 1个月前 作者 Ben07 143 次浏览 来自 问答

写的是一个网络爬虫,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。难道不起效果吗? 谢谢。

回到顶部