Lors de l'utilisation de jQuery, je savais que cette promesse est un mode de mode de programmation asynchrone JS, mais je n'ai pas compris la différence entre elle et l'objet différé de JQuery. Au fur et à mesure que le projet de l'entreprise progresse, nous devons recevoir des données du backend, nous avons donc décidé de le faire.
Promesse
La promesse est un mode qui exploite des événements asynchrones sous forme d'opérations synchrones, en évitant la couche par couche de nidification, et peut utiliser des événements asynchrones dans les chaînes.
Nous savons que lors de l'écriture de code asynchrone JavaScript, le rappel est le mécanisme le plus facile, mais si vous utilisez ce mécanisme, vous devez sacrifier le flux de contrôle, la manipulation des exceptions et la sémantique de fonction, et même nous laisser tomber dans une fosse de rappel, et Promise résout ce problème.
Dans ES6, les AngularJS intégrés intégrés Q en promesse, AngularJS, et lorsqu'ils utilisent des promesses / A spécifications, comme suit:
Chaque tâche a trois états: en attente, rempli et échoué.
1. État de tension: vous pouvez passer à l'état de réalisation ou de rejet.
2. État rempli: ne peut être modifié en aucun autre état, et l'état ne peut être modifié, et il doit y avoir une valeur de valeur.
3. État réjectant: il ne peut être changé en aucun autre État, et l'état ne peut être modifié, il doit y avoir une raison.
Le transfert d'État est unique. Une fois que l'état est rempli (terminé) ou échoué (échoué / rejeté), il ne peut plus changer.
La copie de code est la suivante:
fonction oktoGreet (name) {
Nom de retour === 'Robin Hood';
}
fonction asyncgreet (name) {
var différé = $ q.defer ();
setTimeout (function () {
// Parce que cette fonction asynchrone FN est exécutée dans le futur de manière asynchrone, nous enroulons le code dans l'appel $ applique, tout en observant correctement le changement dans le modèle
$ scope. $ appliquer (function () {
Deferred.Notify ('sur le point de saluer' + nom + '.');
if (oktoGreet (name)) {
Deferred.Resolve ('Hello,' + name + '!');
} autre {
Deferred.Reject ('Greeting' + name + 'n'est pas autorisé.');
}
});
}, 1000);
retour différé.promes;
}
var promesse = asyncgreet ('Robin Hood');
promesse.then (fonction (salutation) {
alert ('succès:' + salutation);
}, fonction (raison) {
alert ('a échoué:' + raison);
}, fonction (mise à jour) {
alert ('Got Notification:' + Update);
});
Utilisation de base de Q Promise
Le code ci-dessus montre le rôle de plusieurs méthodes d'instances désactivées construites par $ q.defer (). Si l'opération asynchrone est réussie, l'état de l'objet de promesse est changé en «succès» (c'est-à-dire de l'ensemble au résolu); Si l'opération asynchrone est échouée, l'état est changé en "échoué" (c'est-à-dire de l'ensemble à rejeter). Enfin, renvoyez différé.
JS aura une promesse native, il y a déjà des objets prometteurs dans ES6, et l'API Basic Promise est implémentée dans les versions bêta de Firefox et Chrome 32.
$ q.efferd dans angularjs
Renvoyez l'objet défféré à appeler enchaîné en appelant $ q.defferd. Cet objet associe les trois états de tâche dans les spécifications Promises / A via l'API.
API déffaite
Méthode de l'objet défini
1. Resolve (Value): Dans la déclaration résoudre (), il indique que l'objet Promise change de l'état en attente à résoudre.
2. Reject (raison): À la déclaration résolution (), il indique que l'objet Promise change de l'état en attente à rejeter.
3.Notify (valeur): Dans la déclaration Notify (), il indique que l'état non satisfait de l'objet Promise peut être appelé plusieurs fois avant de résoudre ou de rejeter.
Propriétés d'objets définis
Promesse: La dernière chose qui revient est une nouvelle propriété Promise Promise de l'objet différé, pas l'objet différé d'origine. Ce nouvel objet Promise ne peut observer que l'état de l'objet Promise d'origine et ne peut pas modifier l'état interne de l'objet différé, ce qui peut empêcher la modification de l'état de la tâche en externe.
Promise API
Lors de la création d'une instance différée, un nouvel objet de promesse est créé et la référence peut être obtenue via Refort.Promis.
Le but de l'objet Promise est de permettre à la partie intéressée d'obtenir ses résultats d'exécution lorsque la tâche différée est terminée.
Méthodes de promesse d'objets
1.Thes (ErrorHandler, FayledHandler, ProgressHandler): La méthode alors est utilisée pour écouter différents états d'une promesse. L'erreur-Handler écoute l'état défaillant, le HAUPLIELHHANDLER écoute à l'état accompli et le ProgressHandler écoute un état non satisfait. De plus, le rappel de notification peut être appelé 0 à plusieurs fois, fournissant une indication de progression avant de résoudre ou de rejeter (résoudre et rejeter).
2.Catch (errorCallback) - raccourci vers promesse.then (null, errorCallback)
3. Enfin (rappel) - vous permet d'observer si une promesse est exécutée ou rejetée, mais vous n'avez pas besoin de modifier la dernière valeur. Cela peut être utilisé pour libérer des ressources ou nettoyer les objets inutiles, que la promesse soit rejetée ou résolue. Pour plus d'informations, veuillez vous référer à la spécification complète de la documentation.
Promed Chain Call peut être implémenté via la méthode alors ().
La copie de code est la suivante:
promesseb = promis. puis (fonction (résultat) {
Retour Résultat + 1;
});
// PromiseB sera traité immédiatement après le traitement des promesses,
// et sa valeur de valeur est le résultat d'une promesse augmentant de 1
Autres méthodes de $ q
$ q. où (valeur): passez la valeur variable, promesse.then () exécute un rappel réussi
$ Q.all (promesses): les promesses multiples doivent être exécutées avec succès avant de pouvoir être exécutées avec succès. La valeur est passée sous forme de tableau ou de valeur de hachage. Chaque valeur du tableau est l'objet Promise correspondant à l'index.