我正在用 JavaScript 编写一个具有以下属性的构造函数:
function WhizBang() {
var promise;
this.publicMethod_One = function publicMethod_One() { ... };
this.publicMethod_Two = function publicMethod_Two() { ... };
promise = asyncInit();
}
因此,调用new WhizBang()
将启动该asyncInit()
过程。从上面的代码中不明显的是,在此调用asyncInit()
关闭之前,接口中的任何公共方法都不应该运行。
因此, 的定义publicMethod_One()
可能如下所示:
function publicMethod_One() {
promise
.then( doStuff )
.catch( reportInitFailure )
;
function doStuff() { ... }
function reportInitFailure() { ... }
}
发生的一些事情doStuff()
是异步的;其中一些不是。
所以,如果我班的最终用户做了这样的事情:
function main() {
var whizBang = new WhizBang();
whizBang
.publicMethod_One()
.publicMethod_Two()
;
}
在关闭publicMethod_One()
之前不得拨打电话。asyncInit()
并且在publicMethod_Two()
两者都关闭之前不得asyncInit()
拨打publicMethod_One()
电话。
如何定义我的类方法以便它们是可链接的?
我认为我需要做的是定义一个类,其公共方法都等同于调用then()
一个承诺,然后是特定于类的实现内容。
互联网,停!
(在您的答案中使用Bluebird Promise Library的奖励积分。)