Utilisation des rappels dans les méthodes Promise .then : un anti-modèle
La pratique consistant à fournir une fonction de rappel à un service AngularJS, comme on le voit dans l'extrait de code que vous avez fourni peut sembler pratique, mais il suit un anti-modèle. Cette approche perturbe le flux de programmation asynchrone et l'inversion de contrôle prévues par Promises.
Pourquoi s'agit-il d'un anti-modèle ?
-
Chaînage d'interruptions : Les méthodes Promise .then vous permettent d'enchaîner plusieurs opérations asynchrones. En utilisant un rappel, vous perdez la possibilité de continuer facilement à traiter le résultat d'une opération dans une opération suivante.
-
Inversion de contrôle : Le code d'origine inverse le contrôle d'exécution en passant le rappel du module consommateur vers le module fournisseur. Cela rend plus difficile la gestion et le débogage du flux d'exécution.
-
Complexité inutile des promesses : Les promesses fournissent un mécanisme de gestion des opérations asynchrones. En enveloppant les promesses dans des rappels, vous introduisez une complexité inutile et obscurcissez l'intention du code.
Solution de refactorisation :
Pour refactoriser le code et éliminer ces problèmes , vous pouvez utiliser une simple méthode .then sans fonction de rappel :
var getTokens = function() {
return $http.get('/api/tokens');
};
Copier après la connexion
Dans le module consommateur, vous pouvez ensuite utiliser directement .then pour enchaîner les opérations :
yourModule.getTokens()
.then(function(response) {
// handle it
});
Copier après la connexion
Avantages du code refactorisé :
-
Maintient le chaînage : En renvoyant une promesse à partir de la fonction getTokens, vous pouvez facilement enchaîner les opérations ultérieures.
- Préserve le contrôle : Le module consommateur contrôle l'exécution des opérations asynchrones sans compter sur les rappels.
-
Simplifie le code : Le code refactorisé simplifie le processus de gestion asynchrone, le rendant plus facile à comprendre et à entretenir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!