178 votes

HttpPromise angulaire : différence entre le « succès » / méthodes « erreur », « puis » ' arguments de s

Selon AngularJS doc, appelle - $http de retour suivantes:

Renvoie une promesse de l'objet avec le standard puis de la méthode et de deux http méthodes spécifiques: succès et erreur. La alors la méthode prend deux arguments un succès et une erreur de callback qui sera appelée avec un objet de réponse. Le succès et erreur méthodes prennent un seul argument - une fonction qui sera appelée lorsque la demande réussit ou échoue, respectivement. Les arguments passés à ces fonctions sont déstructurées représentation de la réponse de l'objet passé dans la méthode.

Hormis le fait que l' response objet est déstructuré, dans un cas, je ne comprends pas la différence entre

  • le succès ou l'erreur rappels réussi à passer comme arguments d' promise.then
  • les rappels passés comme arguments pour l' promise.success/promise.error méthodes de la promesse

Est-ce là tout? Quel est le point de ces deux manières de passer d'apparence identique rappels?

204voto

event_jr Points 9805

Il y a quelques bonnes réponses ici déjà. Mais il est intéressant de conduire à la maison la différence dans le parallélisme offert:

  • success() renvoie la promesse d'origine
  • then() retourne une nouvelle promesse

La différence est - then() des lecteurs des opérations séquentielles, puisque chaque appel renvoie une nouvelle promesse.

$http.get(/*...*/).
  then(function seqFunc1(response){/*...*/}).
  then(function seqFunc2(response){/*...*/})
  1. $http.get()
  2. seqFunc1()
  3. seqFunc2()

success() lecteurs opérations en parallèle, depuis les gestionnaires sont enchaînés sur la même promesse.

$http(/*...*/).
  success(function parFunc1(data){/*...*/}).
  success(function parFunc2(data){/*...*/})
  1. $http.get()
  2. parFunc1(), parFunc2() en parallèle

157voto

pkozlowski.opensource Points 52557

NB Cette réponse est entachée d'erreur de droit; comme l'a fait remarquer un commentaire ci-dessous, la réussite() retourne la promesse d'origine. Je ne vais pas le changer; et le laisser à l'OP à modifier.


La principale différence entre les 2 est que, .then() appel renvoie une promesse (résolu avec une valeur retournée par une fonction de rappel), tandis que .success() est une méthode plus traditionnelle de l'enregistrement des rappels et ne retourne pas une promesse.

Promesse à base de rappels (.then()) facilite la chaîne de promesses (faire un appel, interpréter les résultats et puis faire un autre appel, interpréter les résultats, de faire encore un appel, etc.).

L' .success() méthode est une procédure simplifiée, méthode bien pratique quand vous n'avez pas besoin de chaîne d'appel, ni le travail, avec la promesse de l'API (par exemple, dans le service de routage).

En bref:

  • .then() - puissance de la promesse de l'API, mais un peu plus détaillé
  • .success() - ne retourne pas une promesse, mais en propose un peu plus commode de syntaxe

114voto

TheHippo Points 11900

Quelques exemples de code pour la requête GET simple. Peut-être que cela aide à comprendre la différence. À l’aide de `` :

À l’aide de / :

17voto

MichaelLo Points 211

Juste pour terminé, voici un exemple de code indiquant les différences :

succès \ erreur :

puis :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X