2017-08-11 4 views
0

Ich habe viele verschiedene Beiträge darüber gelesen, wie man done() mit $ .ajax() verwendet. Wie ich es verstehe, gibt ajax eine Versprechung zurück, so dass die done() bei Abschluss ausgeführt werden sollte, was jedoch geschieht, wenn jedoch in einer einzelnen() Schleife die erste Schleife erreicht wird, beginnt die zweite Schleife während der ersten Die Schleife wird noch verarbeitet. HierMit each() mit ajax() done() Ajax synchron verarbeiten

ist eine grundlegende jsfiddle der Ausgabe:

https://jsfiddle.net/kLja50xa/1/

Mein gewünschte Ergebnis ist:

1-1 2-1 1-2 2-2

ich die Möglichkeit versucht haben, die Anforderungen an ein Array zu schieben, aber das bedeutet mehr verschachtelt jedes() ajax() loops mit dem gleichen Problem?

Der Grund, warum ich diese in der Reihenfolge verarbeiten muss, ist, dass einige Instanzen innerhalb der Schleife Benutzereingaben erfordern.

Ich kann das erforderliche Ergebnis mit async:false erzwingen. aber aus offensichtlichen Gründen möchte ich das vermeiden. Dies hat auch zusätzliche Auswirkungen auf das Skript, wodurch ich eine Tracking-Nachricht nicht anvisieren und aktualisieren kann, die den Benutzer darüber informiert, wo sich der Prozess befindet.

+1

genannt Wenn Sie Bestellung erzwingen möchten, dann können Sie nicht nur alle asynchronen Anforderungen auf einmal abfeuern. – Phylogenesis

+0

@Phylogenesis - Ich möchte nicht alle auf einmal abfeuern, weshalb ich die done() benutze, um die nächste Anfrage auszulösen, sobald das Ergebnis der ersten erhalten wurde. Hast du einen Vorschlag, wie das geht? – n00bstacker

Antwort

1

Ich glaube nicht möglich ist, mit einer Schleife .... versuchen, eine Funktion, die es selbst nennen, sobald die Ajax

fiddle

eachArray (Array) durchgeführt wird;

function eachArray(array){ 
    $i++; 
    console.log('1-'+$i); 
    ajax.done(function() { 
    console.log('2-'+$i); 
    if($i<array.length){ 
     eachArray(array); 
    } 
    }) 
} 

Ein weiteres cooles Feature ES6 wird generators werden ist eigentlich eine Funktion, die ihren Code pausiert, bis Sie wieder

+0

Traumhaft einfach! Danke! – n00bstacker