jQuery Deferred ruft die resolve / done Callbacks nicht in der richtigen Reihenfolge auf

8

Codebeispiel: Ссылка

Ich habe zwei jQuery Deferred-Objekte.

Ich möchte mehr als eine 'async' Anfrage haben - und nachdem alle laufen, möchte ich, dass die Callbacks (die .done-Funktionen) in der Reihenfolge ausgeführt werden, in der sie angegeben wurden. Leider laufen sie nicht in der richtigen Reihenfolge.

Vielleicht suche ich hier nach Funktionalität, die Deferred nicht bietet?

    
Adam Silver 01.03.2011, 19:25
quelle

2 Antworten

5

Sie müssen Ihre gesamte Anfrage mit einem Master-Deferred-Objekt verknüpfen und alle Callbacks auf ihr Versprechen setzen. Das Master-Deferred-Objekt müsste auf die einzelnen Anforderungen hören und entsprechend auflösen. Der einfachste Weg, dies zu erreichen, wäre, alle verzögerten Objekte im Voraus zu definieren, um das Hühner- und Ei-Problem zu vermeiden:

%Vor%

Geige: Ссылка

Es ist möglich, die Reihenfolge der Definitionen für zurückgestellte Objekte zu ändern, dies würde das Beispiel jedoch wesentlich komplizierter machen.

    
rsp 01.03.2011, 20:11
quelle
1

Adam, wenn Sie Ihr "setTimeout" um ein "for" ändern, können Sie sehen, dass das in der Reihenfolge ausgeführt wird, setTimeout fügt einen "Trigger" hinzu, um "eine andere Aktion" aufzurufen, diese "andere Aktion" wird ausgeführt Sie haben angegeben, aber die setTimeout-Aufrufe werden in der Reihenfolge ausgeführt.

Wenn Sie setTimeout nicht verwenden, wird das Skript der Reihe nach ausgeführt.

    
Cesar 01.03.2011 19:53
quelle