我整个项目都使用了(Bluebird)Promises,但有一个特定的库使用了EventEmitter。
我想要实现类似于:
Promise.on('connect', function() {
x.doSomething();
}).then(function() {
return new Promise(function(resolve) {
y.doAction(resolve); // this will result in `eventB` getting emitted
});
}).on('eventB', function() {
z.handleEventB();
}).then(function() {
z.doSomethingElse();
});
我阅读了在Promise链中使用EventEmitter的答案。 这给了我一种执行“connect”事件回调的方法。 以下是我到目前为止所做的:
var p = new Promise(function(resolve) {
emitter.on('connect', resolve);
});
p.on = function() {
emitter.on.apply(emitter, arguments);
return p;
};
p.on('connect', function() {
x.doSomething();
}).then(function() {
return new Promise(function(resolve) {
y.doAction(resolve); // this will result in eventB getting emitted
});
});
现在如何进一步链式处理 "eventB"?