node.js调用堆栈超出了自循环功能

时间:2014-10-26 15:44:48

标签: node.js recursion

此代码获取了URL,但是我的服务器无法同时处理1k个请求,因此我按照here的要求重新安装,但是它返回错误,为什么?

var http = require('http'),

    path = '/getter.php?id=';
    options = {
        host : 'localhost',
        port : 80,
        path : '/getter.php?id=',
        method : 'GET',
        rejectUnauthorized: false,
        requestCert: true,
        agent: false
    },
    get = function (i, max, step, time) {
        for (i; i <= max; i++) {
            var handler = function (key) {
                http.request(options, function(res) {
                    console.log(key);
                }).end();
            };

            options.path = path + i;
        }

        setTimeout(get(i + step, max + step), time);
    };

get(0, 10, 10, 1000);

错误:

>node index.node.js

index.node.js:13
        get = function (i, max, step, time) {
                       ^
RangeError: Maximum call stack size exceeded

1 个答案:

答案 0 :(得分:0)

这是引起问题的电话:

setTimeout(get(i + step, max + step), time);

这是因为你调用获取,而不是将其设置为稍后调用。

相反,将函数传递给setTimeout

setTimeout(get, time, i + step, max + step);

来自NodeJS docs(强调添加):

  

计划在延迟毫秒后执行一次性回调。   返回一个timeoutObject,可以与clearTimeout()一起使用。   您也可以选择将参数传递给回调。