Qu'est-ce que la promesse explicite de la construction antipattern et comment puis-je l'éviter?

J'ai écrit le code qui fait quelque chose qui ressemble à:

function getStuffDone(param) {           | function getStuffDone(param) {
    var d = Q.defer(); /* or $q.defer */ |     return new Promise(function(resolve, reject) {
    //or = new $.Deferred() etc.        |     //using a promise constructor
    myPromiseFn(param+1)                 |         myPromiseFn(param+1)
    .then(function(val) { /* or .done */ |         .then(function(val) {
        d.resolve(val);                  |             resolve(val);
    }).catch(function(err) { /* .fail */ |         }).catch(function(err) {
        d.reject(err);                   |             reject(err);
    });                                  |         });
    return d.promise; /* or promise() */ |     });
}                                        | }

Quelqu'un m'a dit ce qui est appelé la "différés antipattern" ou la "Promise constructeur antipattern", respectivement, ce qui est mauvais à propos de ce code et pourquoi est-ce appelé antipattern?

  • Puis-je confirmer que le tenir à l'écart de ce qui est (dans le contexte de la droite, pas de gauche, par exemple) retirez le getStuffDone fonction wrapper et il suffit d'utiliser la Promesse littérale?
  • ou est d'avoir la catch bloc dans la getStuffDone wrapper de la antipattern?
  • Au moins pour le natif Promise exemple vous avez aussi inutiles fonction des wrappers pour les .then et .catch gestionnaires (c'est à dire il pourrait juste être .then(resolve).catch(reject).) Une tempête parfaite de l'anti-modèles.
  • ce code est écrit de cette façon à des fins didactiques. J'ai écrit cette question et la réponse dans le but d'aider les personnes qui rencontrent ce problème après avoir lu beaucoup de code à la recherche de ce genre 🙂