Wenn Sie AngularJS zum Verarbeiten von Versprechen verwenden, werden Sie manchmal auf Situationen stoßen, in denen Sie mehrere Versprechen verarbeiten müssen.
Die einfachste Lösung besteht darin, dann für jedes Versprechen zu haben. Wie folgt:
var app = angular.module("app",[]); app.controller("AppCtrl", function($q. $timeout){ var one = $q.defer(); var two = $q.defer(); var three = $q.defer(); $timeout(function(){ one.resolve("one done"); }, Math.random() * 1000) $timeout(function(){ two.resolve("two done"); }, Math.random() * 1000) $timeout(function(){ three.resolve("three done"); }, Math.random() * 1000) functioin success(data){ console.log(data); } one.promise.then(success); two.promise.then(success); three.promise.then(success); })
Gibt es einen besseren Weg?
Die Methode $q.all kann eine Reihe von Versprechen akzeptieren und wird wie folgt aufgerufen:
var all = $q.all([one.promise, two.promise, three.promise]); all.then(success);
Was ist ein Versprechen?
Promise ist eine Methode zur asynchronen Verarbeitung von Werten, die den endgültigen möglichen Rückgabewert oder die von einer Funktion ausgelöste Ausnahme darstellt. Beim Umgang mit Remote-Objekten können wir sie als Remote-Objekte betrachten. eines Agenten. Wenn Promise auch eine Art asynchrone Verarbeitungsmethode ist, denken wir dann über den Unterschied zu XHR und $.ajax nach?
Es ist üblich, dass js Schließungen oder Rückrufe verwendet, um auf asynchron zurückgegebene Daten zu reagieren, z. B. XHR-Anfragen nach dem Laden der Seite. Wir können mit den Daten normal interagieren, als wären sie zurückgegeben worden, ohne auf das Auslösen der Rückruffunktion angewiesen zu sein.
Welches Problem soll das von ng vorgeschlagene Versprechen lösen? Rückrufe werden seit langem verwendet, und das Debuggen wird normalerweise sehr schwierig, wenn Rückrufe vorhanden sind, die von anderen Rückrufen abhängen, und Fehler nach jedem Aufruf angezeigt werden müssen. Der Unterschied besteht darin, dass Versprechen eine andere Abstraktion bieten: Diese Funktionen geben Versprechensobjekte zurück.
Warum Versprechen verwenden?
Einer der Vorteile der Verwendung von Versprechen besteht darin, dass Sie der starren Denklogik von Rückrufen entkommen. Promise lässt den asynchronen Verarbeitungsmechanismus eher wie eine Synchronisation aussehen. Basierend auf synchronen Funktionen können wir Rückgabewerte und Ausnahmewerte wie erwartet erfassen. Fehler können jederzeit im Programm abgefangen werden und nachfolgenden Code umgehen, der auf Programmausnahmen basiert. Über die Vorteile dieser Synchronisierung müssen wir uns keine Gedanken machen. Daher besteht der Zweck der Verwendung von Versprechen darin, funktionale Kombinations- und Fehlerblasenfunktionen zu erhalten und gleichzeitig die Fähigkeit zur asynchronen Ausführung des Codes aufrechtzuerhalten.
Versprechen ist ein erstklassiges Objekt und unterliegt einigen Konventionen.
• Es wird nur eine Auflösung oder Ablehnung aufgerufen.
• Wenn ein Versprechen ausgeführt oder abgelehnt wird, werden weiterhin von ihm abhängige Handler aufgerufen.
• Handler werden immer asynchron aufgerufen.