我正在尝试为博客平台创建一个构造函数,并且其中包含许多异步操作。这些范围包括从目录中获取帖子,对其进行解析,通过模板引擎发送它们,等等。
所以我的问题是,让我的构造函数返回一个promise而不是调用它们的函数的对象是不明智的new
。
例如:
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();
});
现在,用户可能还不提供补充的Promise链接:
var engine = new Engine({path: '/path/to/posts'});
// ERROR
// engine will not be available as an Engine object here
这可能会带来问题,因为用户可能会感到困惑,为什么 engine
在构造后仍然无法使用。
在构造函数中使用Promise的原因很有意义。我希望整个博客在构建阶段之后都能正常运行。但是,调用后立即无法访问该对象似乎有点难闻new
。
我一直在争论使用类似engine.start().then()
或engine.init()
将返回Promise的方式。但是那些看起来也很臭。
编辑:这在Node.js项目中。
为避免关注点分离,请使用工厂创建对象。