@mixer/interactive-node
Version:
A NodeJS and Browser compatible client for mixer.com's interactive 2 Protocol
74 lines • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var errors_1 = require("./errors");
/**
* Returns a promise that's resolved when an event is emitted on the
* EventEmitter.
* @param {EventEmitter} emitter
* @param {string} event
* @para {number} timeout used to prevent memory leaks
* @return {Promise<any>}
*/
function resolveOn(emitter, event, timeout) {
if (timeout === void 0) { timeout = 120 * 1000; }
return new Promise(function (resolve, reject) {
var resolved = false;
var listener = function (data) {
resolved = true;
resolve(data);
};
emitter.once(event, listener);
setTimeout(function () {
if (!resolved) {
emitter.removeListener(event, listener);
reject(new errors_1.TimeoutError("Expected to get event " + event));
}
}, timeout);
});
}
exports.resolveOn = resolveOn;
/**
* Return a promise which is rejected with a TimeoutError after the
* provided delay.
* @param {Number} delay
* @return {Promise}
*/
function timeout(message, delay) {
// Capture the stacktrace here, since timeout stacktraces
// often get mangled or dropped.
var err = new errors_1.TimeoutError(message);
return new Promise(function (_, reject) {
setTimeout(function () { return reject(err); }, delay);
});
}
exports.timeout = timeout;
function delay(delay, value) {
return new Promise(function (resolve) {
setTimeout(function () { return resolve(value); }, delay);
});
}
exports.delay = delay;
/**
* Returns a function that calls the wrapped function with only instances of
* the provided class, and throws them otherwise. This is meant to be used
* inside `.catch` blocks of promises.
*
* Imported from frontend2
*
* @example
* // Suppress an error
* return foo.catch(only(AlreadyExistsError));
* // Handle a error
* return foo.catch(only(AdapterResponseError, err => alert(err.toLocaleString())));
*/
function only(cls, handler) {
if (handler === void 0) { handler = function () { return null; }; }
return function (err) {
if (!(err instanceof cls)) {
throw err;
}
return handler(err);
};
}
exports.only = only;
//# sourceMappingURL=util.js.map