我的问题是,将构造函数返回一个 Promise 而不是被调用的函数的对象,是否明智呢?
例如:
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项目。
.init()
方法中执行所有异步操作,该方法可以返回 Promise。然后将对象实例数据与异步初始化操作的构建分离。当您在对象初始化中遇到各种不同的错误(调用者想要以不同方式处理这些错误)时,同样会出现这个问题。最好从构造函数中返回对象,然后使用.init()
返回其他内容。 - jfriend00