@windingtree/wt-search-api
Version:
NodeJS app that enables quick search over data from Winding Tree platform
39 lines (35 loc) • 1.01 kB
JavaScript
const { logger } = require('../../config');
const _processors = {
// <message_type>: [<processor_fn1>, <processor_fn2>, ...]
};
/*
* Register a worker processor for a given message type.
**/
module.exports.register = (messageType, processor) => {
if (!_processors[messageType]) {
_processors[messageType] = [];
}
_processors[messageType].push(processor);
};
/*
* Process a given message by the matching registered
* processors.
**/
module.exports.process = (message) => {
const processors = _processors[message.type];
if (processors) {
for (const processor of processors) {
(async () => {
try {
await processor(message.payload);
} catch (err) {
// Catch errors even without awaiting to avoid
// unhandled promise rejections.
logger.error(`Unexpected error when processing message ${message.type}: ${err.message}`);
}
})();
}
} else {
logger.warn(`Unknown message type: ${message.type}`);
}
};