2016-09-19 4 views
1

In meiner AngularJS Anwendung habe ich ein Array von Parametern (z. B. einige IDs), die als Parameter für eine Ajax-Anrufwarteschlange verwendet werden sollten. Das Problem ist, dass Array mehr als 600 Elemente enthalten kann und wenn ich den Ajax-Aufruf nur rekursiv unter Verwendung der forEach-Schleife durchführe, reagiert die Browserseite möglicherweise nicht mehr, bevor die einzelnen Anforderungen aufgelöst werden, da jede der Antworten die Ansicht aktualisiert. Gibt es eine Technik, die es erlaubt, Ajax-Anfragen z. B. asynchron zu 5 Anfragen gleichzeitig zu senden, und erst dann, wenn diese beendet sind, die nächsten 5?JavaScript, AngularJS - Senden mehrerer simultaner Ajax-Aufrufe

+0

tun vervollständigt Sie aktualisieren müssen Die Aussicht ist doch fertig oder nach jedem fertig? Promise.all ?? –

+0

@IlyaNovojilov - oder eine dritte Option, nach jedem "Batch" von 5 sind abgeschlossen –

+0

Warten Sie, planen Sie 600 Anfragen senden? – Bergi

Antwort

1

ich beste Lösung denken wäre, um den Endpunkt zu ändern, um eine Reihe von IDs zu erlauben, aber ich denke, das ist keine Option. Sie können Versprechen verwenden, um die Anzahl der gleichzeitigen Anfragen zu begrenzen:

Dies ist eine rekursive Funktion, also seien Sie gewarnt. Ich würde dies stark debuggen, bevor ich es in Produktion bringe.

Sie werden auch müssen wahrscheinlich Ihre makeAjaxCall Funktion ändern, um ein Versprechen zurück, wenn es nicht bereits der Fall ist, oder das Versprechen Objekt, um es passieren, so dass es gelöst werden kann, wenn der Ajax-Aufruf

+0

Dies hat den Trick! –

1

Werfen Sie einen Blick auf $q.all(). Dadurch können Sie einen Rückruf ausführen, wenn mehrere Anfragen beendet wurden. Daher können Sie eine begrenzte Anzahl von Anfragen rekursiv ausführen, bis alle Artikel verarbeitet sind.

+0

die Frage erneut lesen - OP möchte die Anzahl der aktiven Anfragen begrenzen –

+0

Sie haben Recht. Aber meine Idee war, die 600 Anfragen zu partitionieren und eine Rekursion zu verwenden, wo die nächsten 'n' Anfragen ausgelöst werden, wenn der Erfolgsrückruf aufgerufen wird. – kenda

+0

scheint wie die "Antwort: fehlte diese Information –

Verwandte Themen