Gibt es ein Muster oder eine Standardmethode für den Umgang mit Ajax-Rennbedingungen? Nehmen Sie das folgende Beispiel. Sie haben zwei Tabellen. Durch Klicken auf eine Zeile in Tabelle 1 werden die Daten aus der Datenbank entfernt und anschließend Tabelle 2 aktualisiert (in der nun alle Zeilen von Tabelle 1 abzüglich der angeklickten Zeile angezeigt werden).
Wenn jemand schnell hintereinander auf eine Reihe von Zeilen klickt, kann dies zu einem Szenario führen, in dem Tabelle 2 nicht für alle Klicks aktualisiert wird, die auf Timing- / Verzögerungsprobleme zurückzuführen sind.
Was könnte ein guter Weg sein, um dies zu erreichen? Ich habe darüber nachgedacht, eine mögliche Warteschlange zu verwenden, aber diese Art von Niederlage macht den Zweck zunichte, dies asynchron zu tun. Ich hätte jedoch immer noch den Vorteil, dass die Benutzeroberfläche nicht gesperrt wird.
quelle
Antworten:
Nur ein Gedanke, vielleicht könnten Sie eine Liste für Ihre Ajax-Rückrufmethoden erstellen. Sie würden Ihren tatsächlichen Ajax-Rückruf in eine Methode einschließen, die diesen Rückruf einem Slot in einer Liste hinzufügt.
Diese Liste wartet in einer bestimmten Reihenfolge auf Rückrufe und wird nur ausgeführt, wenn das oberste Element (der Rückruf, den Sie zuerst aufrufen möchten) gefüllt ist.
quelle
Dies ist keine Rennbedingung.
Eine Race-Bedingung würde auftreten, wenn das Verhalten zwischen zwei asynchronen Threads undefiniert wird. Sie können dieses Problem lösen, indem Sie den Rückruf vom ersten Anruf an verschachteln
quelle
Promise.then()
, asynchrone Rückrufe in der richtigen Reihenfolge auszuführen.Im Allgemeinen sind Rückrufe ein universelles Werkzeug für den Umgang mit asynchronen Aufgaben, und Rückrufe sind in der Tat der Mechanismus zur Verarbeitung von AJAX-Anforderungen in JavaScript. Im Kontext des Rückrufs können Sie sogar auf die Zeile verweisen, auf die geklickt wird (wenn sie geschlossen wird). Die folgenden Artikel sind nützlich: jQuery zurückgestellt und Verwenden von Zurückgestellt in jQuery
Eine andere Sache, die Sie beachten sollten, wenn der Benutzer auf mehrere Schaltflächen klicken darf, ist, dass mehrere Anforderungen gestartet werden. Unterschiedliche Browser können jedoch unterschiedliche Anzahlen von AJAX-Anforderungen gleichzeitig verarbeiten: Concurrent-Ajax-xmlhttprequest-Anforderungen . Um dies zu überwinden, sollten Sie eine grundlegende Anforderungswarteschlange implementieren.
quelle