Работа с Node и mssql для извлечения запросов для пяти различных баз данных с целью устранения взаимного слияния и объединения в более унифицированную схему.
Мой процесс следует этому алгоритму:
создайте общий пул, вызвав эту функцию:
const getPoolConnection = async () => {
try {
let pool = await mssql.connect(`mssql://${username}:${password}@${server}/`);
return pool;
} catch (err) {
console.error(err);
}
};
Эта функция создает пул и возвращает его вызывающей функции. username
, password
и server
импортируются и ограничиваются этим файлом.
Затем мы запрашиваем каждую базу данных и присваиваем результат свойству объекта. Это достигается с помощью цикла forEach
:
lists.forEach(list => {
fullData[list] = db.queryDatabase(pool, customers[list].query).catch(err => console.error(err));
})
которая вызывает эту функцию:
const queryDatabase = async (pool, query) => {
try {
let result = await pool.request().query(query);
// console.log(result);
return result.recordset, pool;
} catch (err) {
console.error(err);
}
};
Теперь, чтобы предотвратить возникновение постобработки до того, как все вызовы базы данных вернут данные, я завернул весь набор вызовов в вызов Promise.all()
в основном файле index.js
. Это вызывающая функция:
const { customers } = require('./query');
const util = require('./util');
const db = require('./db');
fullData = {};
(async () => {
let pool = await db.getPoolConnection();
let lists = Object.keys(customers);
Promise.all(
lists.forEach(list => {
fullData[list] = db.queryDatabase(pool, customers[list].query).catch(err => console.error(err));
})
)
.then(results, pool => {
console.dir(results);
db.closePoolConnection(pool);
})
.catch(err => console.error(err));
})();
Что я не понимаю, так это ошибка, возникающая при попытке отладки приложения:
(узел: 18908) UnhandledPromiseRejectionWarning: TypeError: Не удается прочитать
свойство 'Symbol (Symbol.iterator)' с неопределенным предупреждением.js: 18
в Function.all ()
в c: \ Users \ rutherfordc \ Documents \ GitHub \igration-plus \ index.js: 10: 11
в
at process._tickCallback (internal / process / next_tick.js: 188: 7) (узел: 18908) UnhandledPromiseRejectionWarning: необработанное обещание
отказ. Эта ошибка возникла из-за броска внутри асинхронного
функционировать без блока catch или отклоняя обещание, которое было
не обрабатывается с помощью .catch (). (идентификатор отклонения: 1) warning.js: 18
(узел: 18908) [DEP0018] Предупреждение об устаревании: необработанное обещание
отказы устарели. В будущем обещают отклонения, которые
не обрабатывается, завершит процесс Node.js с ненулевым выходом
код. warning.js: 18 (узел: 18908) UnhandledPromiseRejectionWarning:
ReferenceError: результаты не определены warning.js: 18
в c: \ Users \ rutherfordc \ Documents \ GitHub \igration-plus \ index.js: 15: 11
в
at process._tickCallback (internal / process / next_tick.js: 188: 7) (узел: 18908) UnhandledPromiseRejectionWarning: необработанное обещание
отказ. Эта ошибка возникла из-за броска внутри асинхронного
функционировать без блока catch или отклоняя обещание, которое было
не обрабатывается с помощью .catch (). (код отклонения: 2)