Parlons de la promesse et de ce que $ q est le premier. Promise est un mode de traitement asynchrone, avec de nombreuses méthodes de mise en œuvre, telles que le célèbre Q et JQuery de Kris Kwal.
Qu'est-ce que la promesse
Ceux qui ont déjà appris sur l'Ajax peuvent ressentir la douleur des rappels. Le code synchrone est facile à déboguer, mais le code de rappel asynchrone amènera les développeurs à tomber dans un bourbier et ne peut pas être suivi, comme:
funa (arg1, arg2, function () {funcb (arg1, arg2, function () {funcc (arg1, arg2, function () {xxxx ......})})})})Il est déjà difficile à comprendre et le rappel, et en outre, le rappel sera déclenché à un moment inconnu, ce qui équivaut à ajouter l'insulte à la blessure.
Cependant, avec la spécification de promesse, il peut aider les développeurs à écrire du code asynchrone de manière synchrone, comme dans AngularJS:
Deferabc.Resolve (xxx)
.Then (funcSuccess () {}, funcerror () {}, funcnotify () {});
Lorsque l'objet en résolution est exécuté avec succès, FuncSuccess sera déclenché et s'il échoue, FunCerror sera déclenché. Un peu similaire
Deferabc.Resolve (function () {sunccess: funcsuccess, error: funcerror, notify: funcnotify})Pour le dire franchement, la promesse est une prédéfinition des résultats de l'exécution incertaine. S'il réussit, ce sera xxxx; S'il échoue, ce sera xxxx, tout comme donner quelques promesses à l'avance.
Par exemple, Xiaobai était très paresseux quand il était à l'école. Il a toujours demandé à son colocataire d'apporter de la nourriture et lui a dit à l'avance que s'il y avait des poireaux et des œufs, il achèterait ce légume, sinon il achèterait des œufs frits avec des tomates; Peu importe s'il pouvait les acheter, il devrait se rappeler d'apporter un paquet de cigarettes.
Xiaobai a demandé à son colocataire d'apporter des repas ()
.Pes (œufs de poireau, œufs brouillés avec des tomates)
. finalement (avec un paquet de cigarettes)
SERVICE $ Q
Le service Q est une implémentation de promesse implémentée par elle-même dans AngularJS, qui est beaucoup plus légère que Kris Kwal Q.
Permettez-moi d'abord d'introduire plusieurs méthodes couramment utilisées de $ Q:
Defer () crée un objet différé, qui peut exécuter plusieurs méthodes couramment utilisées, telles que résoudre, rejeter, notifier, etc.
Tous () passe dans le tableau des promesses, exécute des lots et renvoie un objet de promesse
Lorsque () passe dans un paramètre incertain, s'il répond à la norme de promesse, il renvoie un objet de promesse.
En promesse, trois États sont définis: État d'attente, état d'achèvement et état de rejet.
Il existe plusieurs réglementations concernant le statut:
1 Les changements d'état sont irréversibles
2 L'état d'attente peut devenir complet ou rejeté
Méthode Defer ()
Dans $ Q, vous pouvez utiliser la méthode RESOLVE pour devenir l'état d'achèvement; Utilisez la méthode de rejet pour devenir l'état de rejet.
Jetons un coup d'œil à l'utilisation simple de $ Q:
<html ng -pp = "myapp"> <éadf> <meta http-equiv = "contenu-type" contenu = "text / html; charset = utf-8" /> <script src = "http://apps.bdimg.com/libs/angular.js/1.16/angular.min.js"> </ hard> <body> <body> <body> <body> <body> <body> <body> <body> <body> <body> <body> ng-controller = "myctrl"> {{test}} </ div> <script type = "text / javascript"> var myAppModule = angular.module ("myApp", []); MyAppModule.Controller ("MyCtrl", ["$ Scope", "$ q", fonction ($ Scope, $ q) {$ scope.test = 1; // Ceci est uniquement utilisé pour tester si Angularjs est normal, et n'a pas d'autre fonction var defer1 = $ q.defer (); var promesse1 = défer1.promise; promesse1. promesse1 --- Success "); console.log (valeur);}, fonction (valeur) {console.log (" dans promesse1 --- error "); console.log (valeur);}, fonction (valeur) {console.log (" dans promesse1 --- error "); console.log (valeur);}, fonction (valeur) {console.log (" dans promesse1 -. Error "); console.log (valeur);}, fonction (valeur) {console.log ("dans promesse1 --- notifier"); console.log (valeur);}); </cript> </ body> </html>Lorsque Defer () est utilisé pour créer un objet différé, Defer.Promis est utilisé pour renvoyer un objet Promise pour définir la méthode alors. Il y a trois paramètres dans alors, à savoir un rappel réussi, un rappel raté et un rappel de changement d'état.
La variable ou la fonction réalisée dans Resolve renverra le résultat et sera considérée comme le paramètre de la première méthode puis. Ensuite, la méthode renvoie un objet de promesse, il peut donc être écrit comme
xxxx
.Then (a, b, c)
.Then (a, b, c)
.Then (a, b, c)
.attraper()
.enfin()
Continuons à parler du code ci-dessus, puis ... Catch ... enfin, pensez-y comme l'essai ... Catch ... enfin en Java.
Méthode all ()
Cette méthode all () peut combiner plusieurs prises en une seule. Lorsque toutes les promesses sont exécutées avec succès, le rappel ultérieur sera exécuté. Les paramètres du rappel sont le résultat de chaque exécution de promesse.
Cette méthode peut être utilisée lorsque certaines méthodes sont exécutées en lots.
var funca = function () {console.log ("funca"); Retournez "Bonjour, Funa"; } var funcb = function () {console.log ("funcb"); Retournez "bonjour, funb"; } $ q.all ([funca (), funcb ()]) .then (function (result) {console.log (résultat);});Résultats de l'exécution:
funca
funcb
Array ["Hello, Funa", "Hello, Funb"]
Méthode quand ()
Lorsque la méthode peut être transmise, un paramètre, qui peut être une valeur, et peut être un objet externe qui est conforme à la norme de promesse.
var funca = function () {console.log ("funca"); Retournez "Bonjour, Funa"; } $ q.when (funca ()) .then (function (result) {console.log (résultat);});Cette méthode peut être utilisée lorsque les paramètres passés sont incertains.
bonjour, funa
Ce qui précède est une introduction détaillée aux informations sur le service Promise --- $ q dans AngularJS. Nous continuerons d'ajouter des informations pertinentes à l'avenir. Merci pour votre soutien à ce site!