【发布时间】:2018-12-08 18:34:59
【问题描述】:
与 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);
}
};
现在,为了防止在所有数据库调用返回数据之前进行后处理,我将整个调用集包装在主 index.js 文件中的 Promise.all() 调用中。这是调用函数:
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:无法读取 未定义的warning.js:18的属性'Symbol(Symbol.iterator)' 在 Function.all () 在 c:\Users\rutherfordc\Documents\GitHub\migration-plus\index.js:10:11 在 在 process._tickCallback (internal/process/next_tick.js:188:7) (node:18908) UnhandledPromiseRejectionWarning: 未处理的承诺 拒绝。此错误源于在异步内部抛出 没有 catch 块的函数,或者通过拒绝一个承诺 不使用 .catch() 处理。 (拒绝 id:1)warning.js:18 (节点:18908)[DEP0018] 弃用警告:未处理的承诺 拒绝被弃用。在未来,承诺拒绝是 未处理将以非零退出终止 Node.js 进程 代码。 warning.js:18 (node:18908) UnhandledPromiseRejectionWarning: ReferenceError:结果未定义warning.js:18 在 c:\Users\rutherfordc\Documents\GitHub\migration-plus\index.js:15:11 在 在 process._tickCallback (internal/process/next_tick.js:188:7) (node:18908) UnhandledPromiseRejectionWarning: 未处理的承诺 拒绝。此错误源于在异步内部抛出 没有 catch 块的函数,或者通过拒绝一个承诺 不使用 .catch() 处理。 (拒绝编号:2)
【问题讨论】:
标签: javascript sql-server node.js promise