есть некий сторонний модуль, наследуемый от EventEmitter, назовем его SuperModule. при вызове некоего метода #start, эмитируется событие error или started. передача колбэка в #start не предусмотрена разработчиком модуля.
необходимо выполнить цепочку вызовов асинхронных функций, одним из звеньев которой является вызов #start
Т.е. нужно обеспечить поддержку такого вызова (с передачей колбэка):
SuperModuleInstance.start(function(err){...});
Сейчас реализовано следующим образом:
var SuperModule = require('SuperModule');
SuperModule.prototype.startcb = function(callback){
var cb = function(err){
this.removeListener('error', cb);
this.removeListener('started', cb);
callback(err); // err == null при started
}
this.on('started', cb);
this.on('error', cb);
this.start();
}
...
async.series([
...,
SuperModuleInstance.startcb.bind(SuperModuleInstance),
...],
finalCallback);
есть ли более изящные альтернативы? просто уже не в первый раз возникает необходимость такое вытворять.
форк модуля, а также правки в node_modules не рассматриваются.