Maison >interface Web >js tutoriel >Pourquoi les rappels sont-ils préjudiciables dans les chaînes de promesses AngularJS ?

Pourquoi les rappels sont-ils préjudiciables dans les chaînes de promesses AngularJS ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-13 05:08:02405parcourir

Why are Callbacks Detrimental in AngularJS Promise Chains?

Pourquoi utiliser les rappels dans les chaînes de promesses AngularJS est préjudiciable

Il est souvent suggéré de fournir une fonction de rappel aux services AngularJS, comme le montre le extrait de code ci-dessous :

app.controller('tokenCtrl', function($scope, tokenService) {
    tokenService.getTokens(function callbackFn(tokens) {
        $scope.tokens = tokens;
    });
});

Cependant, cette pratique est déconseillée car Anti-modèle. Les services AngularJS comme $http renvoient des promesses, et attacher des méthodes de rappel à leurs méthodes .then constitue une inversion de contrôle indésirable.

Refactoring

Pour corriger ce problème, modifiez le codez comme suit :

app.controller('tokenCtrl', function($scope, tokenService) {
    tokenService.getTokens()
        .then(function(response) {
            $scope.tokens = response.data;
        });
});

Dans le service module :

app.factory('tokenService', function($http) {
    var getTokens = function() {
        return $http.get('/api/tokens');
    };

    return {
        getTokens: getTokens
    };
});

Cette refactorisation élimine la fonction de rappel et maintient le flux de contrôle souhaité via la méthode .then.

Justification de la refactorisation

Rappels tels qu'implémentés dans le code d'origine :

  • Empêcher un enchaînement ultérieur des succès/erreurs gestionnaires.
  • Déplacez le contrôle sur la gestion des réponses du module appelant vers le module appelé.
  • Présentez la complexité des promesses tout en les employant simultanément comme rappels. Ce paradoxe rend le code confus.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn