将NodeJS与PostgreSQL一起使用不要从数组中插入最后的数据

时间:2018-02-22 14:06:45

标签: javascript node.js postgresql

我使用带有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 ...

我做错了什么?使用异步模式对案例是一个坏主意吗?

1 个答案:

答案 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();




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