511 votes

jQuery deferreds et de promesses .alors() vs .done()

J'ai lu à propos de jQuery deferreds et des promesses et je ne vois pas la différence entre l'utilisation d' .then() & .done() de réussite pour les rappels. Je sais Eric Hynds mentionne qu' .done() et .success() carte pour la même fonctionnalité, mais je devine donc n' .then() comme tous les rappels sont tous invoquée sur un achèvement d'une opération réussie.

Quelqu'un peut-il svp m'éclairer à l'utilisation correcte?

Merci beaucoup

597voto

Julian Aubourg Points 5495

Les rappels attaché done() sera déclenché lorsque le différé est résolu. Les rappels attaché fail() sera déclenché lorsque le différé est rejetée.

Avant de jQuery 1.8, then() était juste sucre syntaxique:

promise.then( doneCallback, failCallback )
// was equivalent to
promise.done( doneCallback ).fail( failCallback )

Que de 1,8 then() est un alias pour pipe() et retourne une nouvelle promesse, voir ici pour plus d'informations sur l' pipe().

success() et error() sont uniquement disponibles sur l' jqXHR objet renvoyé par un appel à l' ajax(). Ils sont simples d'alias pour done() et fail() respectivement:

jqXHR.done === jqXHR.success
jqXHR.fail === jqXHR.error

Aussi, done() n'est pas limité à un seul rappel et filtre non-fonctions (même si il y a un bug avec les chaînes à la version 1.8 qui doit être fixé dans la 1.8.1):

// this will add fn1 to 7 to the deferred's internal callback list
// (true, 56 and "omg" will be ignored)
promise.done( fn1, fn2, true, [ fn3, [ fn4, 56, fn5 ], "omg", fn6 ], fn7 );

En va de même pour fail().

440voto

Lu4 Points 2774

Il y a aussi la différence dans la manière de retourner les résultats sont traités (de son nom de chaînage, done n'a pas de chaîne, alors que then produit d'appel chaînes)

promise.then(function (x) { // Suppose promise returns "abc"
    console.log(x);
    return 123;
}).then(function (x){
    console.log(x);
}).then(function (x){
    console.log(x)
})

Les résultats suivants vont être connecté:

abc
123
undefined

Alors que

promise.done(function (x) { // Suppose promise returns "abc"
    console.log(x);
    return 123;
}).done(function (x){
    console.log(x);
}).done(function (x){
    console.log(x)
})

obtenez les éléments suivants:

abc
abc
abc

60voto

Marino Šimić Points 4885

.done() n'a qu'un rappel et c'est le succès de rappel

.alors() possède à la fois le succès et l'échec des rappels

.fail() n'a qu'un seul échec de rappel

donc, il est à vous ce que vous devez faire... avez-vous des soins si elle réussit ou échoue?

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