Angenommen, ich mag einen asynchronen AJAX-Request an den Server senden, und wenn es eine weitere Anforderung senden und wiederholen Sie reagiert immer:Endlosschleife mit asynchronem Rückruf Mustern in Javascript
function sendXHR(url, callback) {
// Send XMLHttpRequest to server and call callback when response is received
}
function infinite() {
sendXHR('url/path', infinite);
}
infinite();
Ich nehme hier würden wir aus laufen Stapelplatz recht schnell, also wie kann ich das machen (ohne zu blockieren)?
Das Muster der Weitergabe von Rückrufen eher als return
ist besonders beliebt mit node.js
. Wie schaffen Menschen unendliche Schleifen? Ich glaube nicht, dass die meisten JS-Engines irgendeine Art von Tail-Call-Optimierung machen.
Das wäre nicht aus laufen Stack-Space, wenn der Callback aufgerufen wird Die Stack-Frames darunter enthalten nicht den Stack des vorherigen "unendlichen" Calls. –
@DanD. Ich habe es in Chrome ausprobiert, indem ich 'callback();' in 'sendXHR' hinzugefügt habe, und nach ungefähr 9500 Iterationen die maximale Call-Stack-Größe überschritten hat. Firefox sagt auch 'zu viel Rekursion'. – Flash
Nun, vielleicht gibt es etwas Interessantes in der * Send XMLHttpRequest an den Server und Rückruf aufrufen, wenn die Antwort erhalten ist * Teil. –