将数组值插入数据库Node.js,Oracle,orawrap

我有一个应用程序在浏览器中运行,并与REST服务进行通信。 剩下的服务可以写数据到Oracle数据库,可以说它必须写这样一个实体:

var entity = { "id": 0, "date": new Date(), "comment": 'test' }; 

我有一个声明,看起来像这样:

 ar statement = 'INSERT INTO MY_TABLE ( ' + ' THE_ID ' + ' , THE_DATE ' + ' , THE_COMMENT ' + ' ) VALUES ( ' + ' :id, ' + " :date, " + ' :comment' + ')'; 

实体数组被调用:

 var entities = []; 

现在让我们说,我有一个约30的长度的实体数组。我试过recursion:

 var i = 0; // Function that Batch inserts an Array. var insertArray = function (statement, entities, i, cb) { if (i >= entities.length) { console.log("exit insertArray."); return cb(null, true); } insert(statement, entities[i], function (err, val) { if (err) { console.log('error insertArray: ', err); return cb(err, null); } insertArray(statement, entities, ++i, cb); }); }; 

这是将一个实体插入到数据库中的函数

 var insert = function (statement, entity, cb) { orawrap.execute( statement, { "id": { val: entity.id, dir: oracledb.BIND_INOUT, type: oracledb.NUMBER }, "date": { val: entity.date, dir: oracledb.BIND_INOUT, type: oracledb.DATE }, "comment": { val: entity.comment, dir: oracledb.BIND_INOUT, type: oracledb.STRING } }, cb); }; 

此代码在3次recursion调用后停止插入。 我也尝试了for循环。 但是由于在asynchronous环境中使用callback更好,recursion的想法对我来说似乎更好。 无论如何,迭代方法也没有批量插入值。

你有一个想法如何解决这个问题?

在Node.js中完成这些任务的最简单方法是使用asynchronous库。 检出asynchronous库的eachSeries方法: https : //github.com/caolan/async#each

这个链接指向each链接,但是each链接都是一个variables,而不是并行地连续运行(一个接一个)。 您只需传递数组,应该为数组中的每个元素运行的函数,以及在迭代完成时调用另一个函数。