omelop
Version:
[](https://travis-ci.org/node-omelop/omelop)
112 lines • 9.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.transaction = void 0;
const async = require("async");
const utils = require("../../util/utils");
const omelop_logger_1 = require("omelop-logger");
let logger = (0, omelop_logger_1.getLogger)('omelop', __filename);
let transactionLogger = (0, omelop_logger_1.getLogger)('transaction-log', __filename);
let transactionErrorLogger = (0, omelop_logger_1.getLogger)('transaction-error-log', __filename);
function transaction(name, conditions, handlers, retry) {
if (!retry) {
retry = 1;
}
if (typeof name !== 'string') {
logger.error('transaction name is error format, name: %s.', name);
return;
}
if (typeof conditions !== 'object' || typeof handlers !== 'object') {
logger.error('transaction conditions parameter is error format, conditions: %j, handlers: %j.', conditions, handlers);
return;
}
let cmethods = [];
let dmethods = [];
let cnames = [];
let dnames = [];
for (let key in conditions) {
if (typeof key !== 'string' || typeof conditions[key] !== 'function') {
logger.error('transaction conditions parameter is error format, condition name: %s, condition function: %j.', key, conditions[key]);
return;
}
cnames.push(key);
cmethods.push(conditions[key]);
}
let i = 0;
// execute conditions
async.forEachSeries(cmethods, function (method, cb) {
method(cb);
transactionLogger.info('[%s]:[%s] condition is executed.', name, cnames[i]);
i++;
}, function (err) {
if (err) {
process.nextTick(function () {
transactionLogger.error('[%s]:[%s] condition is executed with err: %j.', name, cnames[--i], err.stack);
let log = {
name: name,
method: cnames[i],
time: Date.now(),
type: 'condition',
description: err.stack
};
transactionErrorLogger.error(JSON.stringify(log));
});
return;
}
else {
// execute handlers
process.nextTick(function () {
for (let key in handlers) {
if (typeof key !== 'string' || typeof handlers[key] !== 'function') {
logger.error('transcation handlers parameter is error format, handler name: %s, handler function: %j.', key, handlers[key]);
return;
}
dnames.push(key);
dmethods.push(handlers[key]);
}
let flag = true;
let times = retry;
// do retry if failed util retry times
async.whilst(function () {
return retry > 0 && flag;
}, function (callback) {
let j = 0;
retry--;
async.forEachSeries(dmethods, function (method, cb) {
method(cb);
transactionLogger.info('[%s]:[%s] handler is executed.', name, dnames[j]);
j++;
}, function (err) {
if (err) {
process.nextTick(function () {
transactionLogger.error('[%s]:[%s]:[%s] handler is executed with err: %j.', name, dnames[--j], times - retry, err.stack);
let log = {
name: name,
method: dnames[j],
retry: times - retry,
time: Date.now(),
type: 'handler',
description: err.stack
};
transactionErrorLogger.error(JSON.stringify(log));
utils.invokeCallback(callback);
});
return;
}
flag = false;
utils.invokeCallback(callback);
process.nextTick(function () {
transactionLogger.info('[%s] all conditions and handlers are executed successfully.', name);
});
});
}, function (err) {
if (err) {
logger.error('transaction process is executed with error: %j', err);
}
// callback will not pass error
});
});
}
});
}
exports.transaction = transaction;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb21tb24vbWFuYWdlci9hcHBNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQiwwQ0FBMEM7QUFDMUMsaURBQTBDO0FBQzFDLElBQUksTUFBTSxHQUFHLElBQUEseUJBQVMsRUFBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0MsSUFBSSxpQkFBaUIsR0FBRyxJQUFBLHlCQUFTLEVBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDakUsSUFBSSxzQkFBc0IsR0FBRyxJQUFBLHlCQUFTLEVBQUMsdUJBQXVCLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFLNUUsU0FBZ0IsV0FBVyxDQUFDLElBQVksRUFBRSxVQUE0RCxFQUFFLFFBQXVELEVBQUUsS0FBYztJQUMzSyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1IsS0FBSyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRSxPQUFPO0tBQ1Y7SUFDRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDaEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxpRkFBaUYsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEgsT0FBTztLQUNWO0lBRUQsSUFBSSxRQUFRLEdBQW9DLEVBQUUsQ0FBQztJQUNuRCxJQUFJLFFBQVEsR0FBaUMsRUFBRSxDQUFDO0lBQ2hELElBQUksTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUMxQixJQUFJLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDMUIsS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUU7UUFDeEIsSUFBSSxP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