Disparo Promessa quando um evento é acionado

Todo o meu projeto usa (Bluebird) Promises, mas há uma biblioteca específica que usa EventEmitter.

Eu quero alcançar algo como:

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();
});

Eu li a resposta paraEventEmitter no meio de uma cadeia de promessas. Isso me dá uma maneira de executar o retorno de chamada para o evento 'connect'. Aqui é onde eu cheguei até agora

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
    });
});

Agora, como encadear ainda mais o 'eventB'?

questionAnswers(2)

yourAnswerToTheQuestion