C'est une mauvaise pratique d'avoir un constructeur de retour de la fonction une Promesse?

Je suis en train de créer un constructeur pour une plate-forme de blogs et il a de nombreuses opérations asynchrones passe à l'intérieur. Celles-ci vont de l'accaparement des postes à partir de répertoires, l'analyse de leur, de les envoyer par le biais de moteurs de template, etc.

Donc ma question est, ne serait-il pas judicieux d'avoir mon constructeur de retour de la fonction une promesse à la place d'un objet de la fonction qu'ils ont appelé new contre.

Par exemple:

var engine = new Engine({path: '/path/to/posts'}).then(function (eng) {
   //allow user to interact with the newly created engine object inside 'then'
   engine.showPostsOnOnePage();
});

Maintenant, l'utilisateur peut également pas fournir un supplément de Promesse de maillon de chaîne:

var engine = new Engine({path: '/path/to/posts'});

//ERROR
//engine will not be available as an Engine object here

Cela pourrait poser un problème que l'utilisateur peut être confondu pourquoi engine n'est pas disponible après la construction.

La raison de l'utilisation d'une Promesse dans le constructeur de sens. Je veux que le blog à fonctionner après la phase de construction. Cependant, il semble comme une odeur presque de ne pas avoir accès à l'objet immédiatement après l'appel de new.

J'ai débattu à l'aide de quelque chose le long des lignes de engine.start().then() ou engine.init() qui permettrait le retour de la Promesse à la place. Mais aussi celles qui semblent malodorante.

Edit: C'est dans un Node.js projet.

  • Est la création de l'objet de l'opération asynchrone ou à l'acquisition de ses ressources vraiment l'opération asynchrone? Je pense que vous n'aurez pas ce problème si vous avez utilisé DI
  • La conception la plus courante modèle que j'ai vu pour ce type de question est simplement de créer votre objet shell dans le constructeur et ensuite faire toutes les async trucs dans un .init() méthode qui peut ensuite retourner la promesse. Alors vous séparer de données de l'instance de l'objet et de la construction de l'objet de l'opération d'initialisation asynchrone. Le même problème se pose lorsque vous avez toutes sortes d'erreurs (lesquelles l'appelant veut traiter différemment) qui peuvent se produire lors de l'initialisation de l'objet. Beaucoup mieux de retourner l'objet dans le constructeur et ensuite utiliser .init() pour renvoyer d'autres choses.
  • Je suis totalement d'accord avec jfriend00. Il est préférable d'utiliser une méthode init à faire une promesse!
InformationsquelleAutor adam-beck | 2014-06-25