Переписал на 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 => {
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 => {
return new Promise((resolve, reject) => {
if (prms && prms.connection) {
prms.connection.execute(
"BEGIN PKG_EXS.SERVICE_GET(RCSERVICES => :RCSERVICES); END;",
{ RCSERVICES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
{ 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 {
reject(new Error("Не указано подключение (отсутствует поле: connection)"));
}
});
const getServices = async prms => {
try {
let res = await prms.connection.execute(
"BEGIN PKG_EXS.SERVICES_GET(RCSERVICES => :RCSERVICES); END;",
{ RCSERVICES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
{ outFormat: oracledb.OBJECT }
);
let rows = await readCursorData(res.outBinds.RCSERVICES);
return rows;
} catch (e) {
throw new Error(e.message);
}
};
//Получение списка функций сервиса
const getServiceFunctions = prms => {
return new Promise((resolve, reject) => {
if (prms && prms.connection) {
if (prms.nServiceId) {
prms.connection.execute(
"BEGIN PKG_EXS.SERVICEFN_GET(NSERVICE => :NSERVICE, RCSERVICEFNS => :RCSERVICEFNS); END;",
{ NSERVICE: prms.nServiceId, RCSERVICEFNS: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
{ 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 {
reject(new Error("Не указан идентификатор сервиса (отсутствует поле: nServiceId)"));
}
} else {
reject(new Error("Не указано подключение (отсутствует поле: connection)"));
}
});
const getServiceFunctions = async prms => {
try {
let res = await prms.connection.execute(
"BEGIN PKG_EXS.SERVICEFN_GET(NSERVICE => :NSERVICE, RCSERVICEFNS => :RCSERVICEFNS); END;",
{ NSERVICE: prms.nServiceId, RCSERVICEFNS: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
{ outFormat: oracledb.OBJECT }
);
let rows = await readCursorData(res.outBinds.RCSERVICEFNS);
return rows;
} catch (e) {
throw new Error(e.message);
}
};
//Запись в протокол работы
const log = prms => {
return new Promise((resolve, reject) => {
if (prms && prms.connection) {
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;",
{
NLOG_STATE: prms.nLogState,
SMSG: prms.sMsg,
NEXSSERVICE: prms.nServiceId,
NEXSSERVICEFN: prms.nServiceFnId,
NEXSQUEUE: prms.nQueueId,
RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
},
{ 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 {
reject(new Error("Не указан тип сообщения журнала (отсутствует поле: nLogState)"));
}
} else {
reject(new Error("Не указано подключение (отсутствует поле: connection)"));
}
});
const log = async prms => {
try {
let res = await 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,
NEXSSERVICE: prms.nServiceId,
NEXSSERVICEFN: prms.nServiceFnId,
NEXSQUEUE: prms.nQueueId,
RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
},
{ outFormat: oracledb.OBJECT, autoCommit: true }
);
let rows = await readCursorData(res.outBinds.RCLOG);
return rows[0];
} catch (e) {
throw new Error(e.message);
}
};
//Считывание очередной порции исходящих сообщений из очереди
const getQueueOutgoing = prms => {
return new Promise((resolve, reject) => {
if (prms && prms.connection) {
if (prms.nPortionSize) {
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,
RCQUEUES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
},
{ outFormat: oracledb.OBJECT, autoCommit: true, fetchInfo: { bMsg: { 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)"));
const getQueueOutgoing = async prms => {
try {
let res = await 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,
RCQUEUES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
},
{
outFormat: oracledb.OBJECT,
fetchInfo: { blMsg: { type: oracledb.BUFFER }, blResp: { type: oracledb.BUFFER } }
}
} 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 => {
@ -278,10 +187,14 @@ const setQueueState = async prms => {
SEXEC_MSG: prms.sExecMsg,
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);
return rows;
return rows[0];
} catch (e) {
throw new Error(e.message);
}