Ich habe mich gefragt, ob es eine Lösung gibt, um die Synchronisierung in JavaScript-Code durchzuführen. Zum Beispiel habe ich den folgenden Fall: Ich versuche, einige Antwortwerte von AJAX-Aufrufen zwischenzuspeichern. Das Problem ist, dass es möglich ist, mehrere Aufrufe gleichzeitig auszuführen, was zu einer Race Condition im Code führt. Daher bin ich sehr neugierig, eine Lösung dafür zu finden? Hat jemand eine Idee, die zu tun?
Antwort
Zu viele Anzeigen?Ich weiß, es ist viel zu spät, aber ich dachte, ich würde einfach eine Verbesserung geben. Artem Barger arbeitete seine eigene Lösung, die setTimeout verwendet, wenn der zwischengespeicherte Wert "Aktualisierung" ist ... Stattdessen markieren Sie einfach die Funktion auf eine verknüpfte Warteschlange gegen den zwischengespeicherten Wert, so dass Sie ein Objekt, das die tatsächlichen zwischengespeicherten Daten und die Warteschlange von Funktionen, die mit den zwischengespeicherten Daten aufrufen, sobald die Daten zurückgegeben wird, hält haben.
Wenn es sich also um eine "Aktualisierung" handelt, fügen Sie Ihre Funktion einfach der Warteschlange hinzu, die mit den Elementdaten verknüpft ist, und wenn die Daten zurückgegeben werden, setzen Sie die Daten und durchlaufen dann die Warteschlange der Funktionen (Callbacks) und rufen sie mit den zurückgegebenen Daten auf.
Wenn man es technisch angehen möchte, könnte man ein bestimmtes QOS-Timeout festlegen, während man die Warteschlange durchläuft, eine Stoppuhr zu Beginn der Iteration setzen und bei Erreichen einer bestimmten Zeit ein setTimeout aufrufen, um zurück in die Warteschlange zu gehen und die Iteration fortzusetzen... ich hoffe, Sie haben das verstanden :) - Es spart im Grunde X Aufrufe von setTimout, so dass nur einer benötigt wird.
Schauen Sie sich Artem Bargers Code oben an, und Sie sollten das Wesentliche meines Vorschlags verstehen.
- See previous answers
- Weitere Antworten anzeigen