/ Der / node.js-Aufrufstapel wurde bei selbstwiederholender Funktion überschritten - node.js, Rekursion

node.js Aufrufstack bei einer sich selbst wiederholenden Funktion überschritten - node.js, Rekursion

Dieser Code erhält die URL, mein Server konnte jedoch nicht gleichzeitig 1k-Anfragen bearbeiten, so dass ich dafür gesorgt habe, dass diese als gegeben eingestuft wurden Hier, aber es gibt unten Fehler zurück, warum?

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);

ERROR:

>node index.node.js

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

Antworten:

0 für die Antwort № 1

Dies ist der Aufruf, der das Problem verursacht:

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

Es ist, weil du bist Berufung get, anstatt es so einzustellen, dass es später aufgerufen wird.

Übergeben Sie stattdessen die Funktion und Argumente an setTimeout:

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

Vom NodeJS Dokumente (Betonung hinzugefügt):

So planen Sie die Ausführung eines einmaligen Rückrufs nach einer Verzögerung von Millisekunden. Gibt ein timeoutObject zur möglichen Verwendung mit clearTimeout () zurück. Optional können Sie auch Argumente an den Callback übergeben.