Переписал на async/await вместо Promise

This commit is contained in:
Mikhail Chechnev 2018-11-26 20:52:13 +03:00
parent c9b4fe161c
commit c71192553b

View File

@ -57,41 +57,6 @@ const SQUEUE_EXEC_STATE_ERR = "ERR"; //Обработано с ошибками
// Тело модуля // Тело модуля
//------------ //------------
//Подключение к БД
const connect = async prms => {
try {
if (prms && prms.sUser && prms.sPassword && prms.sConnectString) {
const conn = await oracledb.getConnection({
user: prms.sUser,
password: prms.sPassword,
connectString: prms.sConnectString
});
if (prms.sSessionAppName) conn.module = prms.sSessionAppName;
return conn;
} else {
throw new Error(
"Не указаны параметры подключения (отсутствует одно из полей: sUser, sPassword, sConnectString)"
);
}
} catch (e) {
throw new Error(e.message);
}
};
//Отключение от БД
const disconnect = async prms => {
if (prms && prms.connection) {
try {
const conn = await prms.connection.close();
return;
} catch (e) {
throw new Error(e.message);
}
} else {
throw new Error("Не указано подключение (отсутствует поле: connection)");
}
};
//Чтение данных из курсора //Чтение данных из курсора
const readCursorData = cursor => { const readCursorData = cursor => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -109,82 +74,65 @@ const readCursorData = cursor => {
}); });
}; };
//Подключение к БД
const connect = async prms => {
try {
const conn = await oracledb.getConnection({
user: prms.sUser,
password: prms.sPassword,
connectString: prms.sConnectString
});
if (prms.sSessionAppName) conn.module = prms.sSessionAppName;
return conn;
} catch (e) {
throw new Error(e.message);
}
};
//Отключение от БД
const disconnect = async prms => {
try {
await prms.connection.close();
return;
} catch (e) {
throw new Error(e.message);
}
};
//Получение списка сервисов //Получение списка сервисов
const getServices = prms => { const getServices = async prms => {
return new Promise((resolve, reject) => { try {
if (prms && prms.connection) { let res = await prms.connection.execute(
prms.connection.execute( "BEGIN PKG_EXS.SERVICES_GET(RCSERVICES => :RCSERVICES); END;",
"BEGIN PKG_EXS.SERVICE_GET(RCSERVICES => :RCSERVICES); END;",
{ RCSERVICES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } }, { RCSERVICES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
{ outFormat: oracledb.OBJECT }, { outFormat: oracledb.OBJECT }
(err, result) => {
if (err) {
reject(new Error(err.message));
} else {
let cursor = result.outBinds.RCSERVICES;
let queryStream = cursor.toQueryStream();
let rows = [];
queryStream.on("data", row => {
rows.push(row);
});
queryStream.on("error", err => {
reject(new Error(err.message));
});
queryStream.on("close", () => {
resolve(rows);
});
}
}
); );
} else { let rows = await readCursorData(res.outBinds.RCSERVICES);
reject(new Error("Не указано подключение (отсутствует поле: connection)")); return rows;
} catch (e) {
throw new Error(e.message);
} }
});
}; };
//Получение списка функций сервиса //Получение списка функций сервиса
const getServiceFunctions = prms => { const getServiceFunctions = async prms => {
return new Promise((resolve, reject) => { try {
if (prms && prms.connection) { let res = await prms.connection.execute(
if (prms.nServiceId) {
prms.connection.execute(
"BEGIN PKG_EXS.SERVICEFN_GET(NSERVICE => :NSERVICE, RCSERVICEFNS => :RCSERVICEFNS); END;", "BEGIN PKG_EXS.SERVICEFN_GET(NSERVICE => :NSERVICE, RCSERVICEFNS => :RCSERVICEFNS); END;",
{ NSERVICE: prms.nServiceId, RCSERVICEFNS: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } }, { NSERVICE: prms.nServiceId, RCSERVICEFNS: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
{ outFormat: oracledb.OBJECT }, { outFormat: oracledb.OBJECT }
(err, result) => {
if (err) {
reject(new Error(err.message));
} else {
let cursor = result.outBinds.RCSERVICEFNS;
let queryStream = cursor.toQueryStream();
let rows = [];
queryStream.on("data", row => {
rows.push(row);
});
queryStream.on("error", err => {
reject(new Error(err.message));
});
queryStream.on("close", () => {
resolve(rows);
});
}
}
); );
} else { let rows = await readCursorData(res.outBinds.RCSERVICEFNS);
reject(new Error("Не указан идентификатор сервиса (отсутствует поле: nServiceId)")); return rows;
} catch (e) {
throw new Error(e.message);
} }
} else {
reject(new Error("Не указано подключение (отсутствует поле: connection)"));
}
});
}; };
//Запись в протокол работы //Запись в протокол работы
const log = prms => { const log = async prms => {
return new Promise((resolve, reject) => { try {
if (prms && prms.connection) { let res = await prms.connection.execute(
if (!(prms.nLogState === "undefined")) {
prms.connection.execute(
"BEGIN PKG_EXS.LOG_PUT(NLOG_STATE => :NLOG_STATE, SMSG => :SMSG, NEXSSERVICE => :NEXSSERVICE, NEXSSERVICEFN => :NEXSSERVICEFN, NEXSQUEUE => :NEXSQUEUE, RCLOG => :RCLOG); END;", "BEGIN PKG_EXS.LOG_PUT(NLOG_STATE => :NLOG_STATE, SMSG => :SMSG, NEXSSERVICE => :NEXSSERVICE, NEXSSERVICEFN => :NEXSSERVICEFN, NEXSQUEUE => :NEXSQUEUE, RCLOG => :RCLOG); END;",
{ {
NLOG_STATE: prms.nLogState, NLOG_STATE: prms.nLogState,
@ -194,78 +142,39 @@ const log = prms => {
NEXSQUEUE: prms.nQueueId, NEXSQUEUE: prms.nQueueId,
RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
}, },
{ outFormat: oracledb.OBJECT, autoCommit: true }, { outFormat: oracledb.OBJECT, autoCommit: true }
(err, result) => {
if (err) {
reject(new Error(err.message));
} else {
let cursor = result.outBinds.RCLOG;
let queryStream = cursor.toQueryStream();
let rows = [];
queryStream.on("data", row => {
rows.push(row);
});
queryStream.on("error", err => {
reject(new Error(err.message));
});
queryStream.on("close", () => {
resolve(rows[0]);
});
}
}
); );
} else { let rows = await readCursorData(res.outBinds.RCLOG);
reject(new Error("Не указан тип сообщения журнала (отсутствует поле: nLogState)")); return rows[0];
} catch (e) {
throw new Error(e.message);
} }
} else {
reject(new Error("Не указано подключение (отсутствует поле: connection)"));
}
});
}; };
//Считывание очередной порции исходящих сообщений из очереди //Считывание очередной порции исходящих сообщений из очереди
const getQueueOutgoing = prms => { const getQueueOutgoing = async prms => {
return new Promise((resolve, reject) => { try {
if (prms && prms.connection) { let res = await prms.connection.execute(
if (prms.nPortionSize) {
prms.connection.execute(
"BEGIN PKG_EXS.QUEUE_NEXT_GET(NPORTION_SIZE => :NPORTION_SIZE, NSRV_TYPE => :NSRV_TYPE, RCQUEUES => :RCQUEUES); END;", "BEGIN PKG_EXS.QUEUE_NEXT_GET(NPORTION_SIZE => :NPORTION_SIZE, NSRV_TYPE => :NSRV_TYPE, RCQUEUES => :RCQUEUES); END;",
{ {
NPORTION_SIZE: prms.nPortionSize, NPORTION_SIZE: prms.nPortionSize,
NSRV_TYPE: NSRV_TYPE_SEND, NSRV_TYPE: NSRV_TYPE_SEND,
RCQUEUES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } RCQUEUES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
}, },
{ outFormat: oracledb.OBJECT, autoCommit: true, fetchInfo: { bMsg: { type: oracledb.BUFFER } } }, {
(err, result) => { outFormat: oracledb.OBJECT,
if (err) { fetchInfo: { blMsg: { type: oracledb.BUFFER }, blResp: { type: oracledb.BUFFER } }
reject(new Error(err.message));
} else {
let cursor = result.outBinds.RCQUEUES;
let queryStream = cursor.toQueryStream();
let rows = [];
queryStream.on("data", row => {
rows.push(row);
});
queryStream.on("error", err => {
reject(new Error(err.message));
});
queryStream.on("close", () => {
resolve(rows);
});
}
} }
); );
} else { let rows = await readCursorData(res.outBinds.RCQUEUES);
reject(new Error("Не указан размер извлекаемой порции сообщений (отсутствует поле: nPortionSize)")); return rows;
} catch (e) {
throw new Error(e.message);
} }
} else {
reject(new Error("Не указано подключение (отсутствует поле: connection)"));
}
});
}; };
//Помещение очередного входящего сообщения в очередь //Помещение очередного входящего сообщения в очередь
const putQueueIncoming = prms => {}; const putQueueIncoming = async prms => {};
//Установка значения в сообщении очереди //Установка значения в сообщении очереди
const setQueueState = async prms => { const setQueueState = async prms => {
@ -278,10 +187,14 @@ const setQueueState = async prms => {
SEXEC_MSG: prms.sExecMsg, SEXEC_MSG: prms.sExecMsg,
RCQUEUE: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } RCQUEUE: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
}, },
{ outFormat: oracledb.OBJECT, autoCommit: true, fetchInfo: { bMsg: { type: oracledb.BUFFER } } } {
outFormat: oracledb.OBJECT,
autoCommit: true,
fetchInfo: { blMsg: { type: oracledb.BUFFER }, blResp: { type: oracledb.BUFFER } }
}
); );
let rows = await readCursorData(res.outBinds.RCQUEUE); let rows = await readCursorData(res.outBinds.RCQUEUE);
return rows; return rows[0];
} catch (e) { } catch (e) {
throw new Error(e.message); throw new Error(e.message);
} }