Queuing verspricht
Benutze ich mbostock/queue für queuing paar asynchronen Betrieb. Es ist mehr zu rate limit (UI generieren wenigen Veranstaltungen, wo die backend-Verarbeitung kann es langsam), und auch um sicherzustellen, dass Sie der Reihe nach abgearbeitet werden. Ich benutze es wie
function request(d, cb) {
//some async oper
add.then(function(){
cb(null, "finished ")
})
}
var addQ = queue(1);
addQ.defer(request) //called by few req at higher rates generated by UI
Ich bereits verwendet angular.js $q für asynchronen Betrieb. So, muss ich mbostock/queue
, oder kann ich das erstellen einer queue aus $q
(die ist in Geist https://github.com/kriskowal/q)
Dank.
gute Frage, btw. Ich werde weiter editieren meine Antwort/pen über die nächsten Stunden, und hoffentlich meinen Stift helfen ppl die Straße hinunter.
InformationsquelleAutor bsr | 2014-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basic $q-Chain-Beispiel
Ja, Sie kann aufbauen einer verketteten queue mit Winkel $q! Hier ist ein Beispiel, das Ihnen zeigt, wie Sie eine Rekursion erstellen Sie eine Warteschlange von beliebiger Länge. In jedem post passiert in Folge (nacheinander). Der zweite posten wird nicht gestartet, bis der erste post ist fertig.
Dies kann hilfreich sein, beim schreiben in Datenbanken. Wenn die Datenbank nicht über einen eigenen Warteschlange auf dem back-End, und Sie machen mehrere Schreibvorgänge zur gleichen Zeit, können Sie feststellen, dass nicht alle Ihre Daten gespeichert!
Ich habe eine Plunkr Beispiel veranschaulichen diesen code in Aktion.
Können Sie eine einfache Funktion, um zu beginnen Ihre Warteschlange. Für die Zwecke dieser demonstration, ich bin vorbei ein Objekt voller Tasten, um eine Funktion, die Spalten werden diese Schlüssel in einzelne posts, dann kannst du Sie Henry ' s HTTP-Post-Dumping-Server. (Dank Henry!)
Hier ist ein link zu der Plunkr Beispiel wenn Sie möchten, um zu versuchen, diese code.
InformationsquelleAutor f1lt3r
Die kurze Antwort ist Nein, Sie benötigen keine extra Bibliothek. Versprechen.dann() ist ausreichend "atomic". Die lange Antwort ist: es ist es Wert, dass eine queue () - Funktion, um code zu TROCKEN. Bluebird-Versprechen scheint ziemlich komplett, aber hier ist etwas, was sich auf AngularJS $q.
Wenn ich machte .queue (), würde ich es wollen, um Fehler zu behandeln, wie gut.
Hier ein eckiges service-Fabrik, und einige Anwendungsfälle:
Wie es zu benutzen:
InformationsquelleAutor Michael Cole
Angekettet Verspricht
Eckig ist
$q
Umsetzung können Sie an die Kette verspricht, und dann Griff löst dieser verspricht, nach Ihrer eigenen Logik. Die Methoden sind ein bisschen anders alsmbostock/queue
, aber die Absicht ist die gleiche. Erstellen Sie eine Funktion, die bestimmt, wie Sie Ihr zeitlich verzögert aufgelöst wird (die Schaffung eines Versprechen), dann diese zur Verfügung stellen, auf eine höhere Ebene Steuerung/service für bestimmte Auflösung, Handhabung.Winkel verwendet
$q.defer()
zurück-Versprechen Objekten, die dann aufgerufen werden, in der Reihenfolge, die Sie möchten, in Ihrer Anwendung Logik. (oder sogar übersprungen hat, mutiert ist, abgefangen, etc...).Werfe ich einige code, aber ich fand dieses 7-Minuten-video unter eierkopf.io-die besten kurz-demo: https://egghead.io/lessons/angularjs-chained-promises, und es wird einen viel besseren job zu erklären. Thomas (der Moderator) baut eine sehr kleine Flug-dashboard-app, die Warteschlangen, bis die Wetter-und Flug-Daten und Prozesse-Warteschlange, wenn ein Benutzer Abfragen, Ihre itenerary.
ThomasBurleson/angularjs-FlightDashboard
Ich in der Einrichtung eine kleinere demonstration auf codepen, mit der situation 'Essen in einem restaurant' um dies zu demonstrieren Konzept: http://codepen.io/LongLiveCHIEF/pen/uLyHx
Code-Beispiele hier:
https://gist.github.com/LongLiveCHIEF/4c5432d1c2fb2fdf937d
mein "kleiner" demonstration entwickelt sich schnell zu einem tutorial/Beispiel-app auf Versprechen basierten Architektur.
Der eierkopf.io video ist paywalled...
Sorry, es war nicht an der Zeit. Es war vor eierkopf hatte ein pro-plan, denke ich.
es war nicht paid content, wenn ich diese Antwort vor 3 Jahren. Aber danke für den downvote, irgendwie!
InformationsquelleAutor Brian Vanderbusch