Wie Sie ein rekursives jQuery-Versprechen korrekt codieren

8

Verzeihen Sie, wenn ich eine bereits sehr gestellte Frage wiederhole, aber alles, was ich bisher gesehen habe, scheint mir nicht rekursiv zu sein oder entspricht nicht dem, was wir tun, und das Thema Versprechen und Zurückgestellt scheint es zu sein sei sehr komplex für mich.

Ich habe einen "Themenbaum", der asynchron erstellt wird, wenn der Benutzer Knoten erweitert. Dieses Thema wird mithilfe eines API-Endpunkts erstellt, der die untergeordneten Elemente eines Knotens beim Klicken auf die Schaltfläche (+) auf dem Zweig des Themenbaums zurückgibt.

Wenn der Benutzer auf die Schaltfläche klickt, versuche ich die Topic-Tree-Elemente rekursiv mit einer Methode zu laden, die wie folgt aussieht:

%Vor%

So sollte es also aussehen, aber ich bin alle verloren beim Lesen der Dokumentation, um sicherzustellen, dass meine Sachen in der richtigen Reihenfolge ausgeführt werden ... Das große Problem, das wir gerade mit dieser Struktur haben, ist, dass meine Knoten alle laden gleichzeitig und löscht dann die ausgewählten Knoten, öffnen und schließen Sie Knoten jederzeit und die Auswahl endet super chaotisch.

Ich möchte weder eine ausführliche Erklärung der Versprechen, noch möchte ich eine vollständige Lösung, sondern eine allgemeine Idee, wie dies zu erreichen ist.

    
Mathieu Dumoulin 18.12.2015, 18:47
quelle

1 Antwort

1

Zunächst einmal, die Komplexität des Abrufs, was Sie brauchen, sollte auf dem Server und nicht der Client behandelt werden. Hunderte von HTTP-Anforderungen vom Client zu erstellen ist ein Performance-Desaster, das darauf wartet, ausgeführt zu werden.

Nun, wie Sie es tun würden, zwei wichtige Fakten:

  • Versprechen funktionieren mit dem Rückgabewert . $.get gibt ein Versprechen für den Wert zurück - deshalb können Sie then davon abziehen, aber Sie können es auch nach außen zurückgeben.
  • Wenn Sie eine Versprechung von einem then -Handler zurückgeben, wird die Versprechensrückkehr von then selbst warten, bis das innere Versprechen zuerst aufgelöst wird.

Hier ist ein Beispiel, das die zwei Punkte veranschaulicht:

%Vor%

Nun zu Ihrem eigentlichen Problem:

%Vor%

Wenn Sie die Ergebnisse aller Aufrufe benötigen, können Sie sie abketten, oder Sie können auf ein Closure-Variablen-Array innerhalb des vor dem letzten schieben und im all-done-Handler darauf zugreifen.

    
Benjamin Gruenbaum 18.12.2015 19:34
quelle

Tags und Links