此代码获取了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
答案 0 :(得分:0)
这是引起问题的电话:
setTimeout(get(i + step, max + step), time);
这是因为你调用获取,而不是将其设置为稍后调用。
相反,将函数和传递给setTimeout
:
setTimeout(get, time, i + step, max + step);
来自NodeJS docs(强调添加):
计划在延迟毫秒后执行一次性回调。 返回一个timeoutObject,可以与clearTimeout()一起使用。 您也可以选择将参数传递给回调。