我使用带有Node-Postgres的NodeJS 8.9.3在将数据插入数据库之前处理来自源的一些数据。处理数据并将其放入哈希值。但是,由于某种原因,该哈希中的最后一项不会被插入,甚至是由forEach()块解析的项目。所有其他项目都已正确添加。
我的代码到现在为止:
filtradas.forEach((key) =>
{
var valor=processa[key];
console.log(key, valor);
var campos=key.split('_');
(async () =>
{
const client=await connection.connect();
try
{
const res=await client.query("INSERT INTO dados VALUES (CAST($1 AS TIMESTAMP),$2,$3,$4)",
[parseData, campos[1], campos[0], valor]);
}
finally
{
client.release();
}
})().catch(e =>
{
console.log(e.stack);
process.exit(-1);
});
});

filtradas
是一个字符串数组,其中包含我想要处理的哈希键(其中一些我之前已经过滤以用于其他用途),而processa
是所有数据。哈希基本上是ormat
{
FOO: 2,
BAR: 3,
BAZ: 4
}
但BAZ没有记录在我的PostgreSQL数据库中,只有FOO和BAR。
然而,console.log(key, valor)
显示BAR ...
我做错了什么?使用异步模式对案例是一个坏主意吗?
答案 0 :(得分:0)
在朋友的帮助下,我找到了以下代码的解决方案。
filtradas.map((key) =>
{
var valor=processa[key];
var campos=key.split('_');
(async() =>
{
const client=await connection.connect().catch(e => { console.error(e.stack) } );
const res=await client.query("INSERT INTO dados VALUES (CAST($1 AS TIMESTAMP),$2,$3,$4)", [parseData, campos[1], campos[0], valor]).catch(e => { console.error(e.stack) } );
await client.release();
})().catch(e =>
{
console.log(e.stack);
process.exit(-1);
});
});
connection.end();

根据他们的说法,我的原始代码没有正确履行承诺,所以最后一个条目没有工作