Переписал на 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,163 +74,107 @@ 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) => { let rows = await readCursorData(res.outBinds.RCSERVICES);
if (err) { return rows;
reject(new Error(err.message)); } catch (e) {
} else { throw new Error(e.message);
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 {
reject(new Error("Не указано подключение (отсутствует поле: connection)"));
}
});
}; };
//Получение списка функций сервиса //Получение списка функций сервиса
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) { "BEGIN PKG_EXS.SERVICEFN_GET(NSERVICE => :NSERVICE, RCSERVICEFNS => :RCSERVICEFNS); END;",
prms.connection.execute( { NSERVICE: prms.nServiceId, RCSERVICEFNS: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
"BEGIN PKG_EXS.SERVICEFN_GET(NSERVICE => :NSERVICE, RCSERVICEFNS => :RCSERVICEFNS); END;", { outFormat: oracledb.OBJECT }
{ NSERVICE: prms.nServiceId, RCSERVICEFNS: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } }, );
{ outFormat: oracledb.OBJECT }, let rows = await readCursorData(res.outBinds.RCSERVICEFNS);
(err, result) => { return rows;
if (err) { } catch (e) {
reject(new Error(err.message)); throw new Error(e.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 {
reject(new Error("Не указан идентификатор сервиса (отсутствует поле: nServiceId)"));
}
} 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")) { "BEGIN PKG_EXS.LOG_PUT(NLOG_STATE => :NLOG_STATE, SMSG => :SMSG, NEXSSERVICE => :NEXSSERVICE, NEXSSERVICEFN => :NEXSSERVICEFN, NEXSQUEUE => :NEXSQUEUE, RCLOG => :RCLOG); END;",
prms.connection.execute( {
"BEGIN PKG_EXS.LOG_PUT(NLOG_STATE => :NLOG_STATE, SMSG => :SMSG, NEXSSERVICE => :NEXSSERVICE, NEXSSERVICEFN => :NEXSSERVICEFN, NEXSQUEUE => :NEXSQUEUE, RCLOG => :RCLOG); END;", NLOG_STATE: prms.nLogState,
{ SMSG: prms.sMsg,
NLOG_STATE: prms.nLogState, NEXSSERVICE: prms.nServiceId,
SMSG: prms.sMsg, NEXSSERVICEFN: prms.nServiceFnId,
NEXSSERVICE: prms.nServiceId, NEXSQUEUE: prms.nQueueId,
NEXSSERVICEFN: prms.nServiceFnId, RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
NEXSQUEUE: prms.nQueueId, },
RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } { outFormat: oracledb.OBJECT, autoCommit: true }
}, );
{ outFormat: oracledb.OBJECT, autoCommit: true }, let rows = await readCursorData(res.outBinds.RCLOG);
(err, result) => { return rows[0];
if (err) { } catch (e) {
reject(new Error(err.message)); throw new Error(e.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 {
reject(new Error("Не указан тип сообщения журнала (отсутствует поле: nLogState)"));
}
} 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) { "BEGIN PKG_EXS.QUEUE_NEXT_GET(NPORTION_SIZE => :NPORTION_SIZE, NSRV_TYPE => :NSRV_TYPE, RCQUEUES => :RCQUEUES); END;",
prms.connection.execute( {
"BEGIN PKG_EXS.QUEUE_NEXT_GET(NPORTION_SIZE => :NPORTION_SIZE, NSRV_TYPE => :NSRV_TYPE, RCQUEUES => :RCQUEUES); END;", NPORTION_SIZE: prms.nPortionSize,
{ NSRV_TYPE: NSRV_TYPE_SEND,
NPORTION_SIZE: prms.nPortionSize, RCQUEUES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
NSRV_TYPE: NSRV_TYPE_SEND, },
RCQUEUES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } {
}, outFormat: oracledb.OBJECT,
{ outFormat: oracledb.OBJECT, autoCommit: true, fetchInfo: { bMsg: { type: oracledb.BUFFER } } }, fetchInfo: { blMsg: { type: oracledb.BUFFER }, blResp: { type: oracledb.BUFFER } }
(err, result) => {
if (err) {
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 {
reject(new Error("Не указан размер извлекаемой порции сообщений (отсутствует поле: nPortionSize)"));
} }
} else { );
reject(new Error("Не указано подключение (отсутствует поле: connection)")); let rows = await readCursorData(res.outBinds.RCQUEUES);
} return rows;
}); } catch (e) {
throw new Error(e.message);
}
}; };
//Помещение очередного входящего сообщения в очередь //Помещение очередного входящего сообщения в очередь
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);
} }