在nodejs中插入语句for循环?

时间:2018-06-02 00:24:13

标签: javascript sql node.js database nosql

我正在尝试使用数组将多个值插入到nosql数据库cassandra中,但是当我使用下面的代码时,它不会为exports.updateDatabase = functions.https.onRequest((req, res) => { // ... }); 中存储的每个值添加一行,而只会添加一行两排。添加的两行在foo5col5

中包含相同的值
col3

例如,结果如下(var insert2 = "INSERT INTO content (col, col2, col3, col4, col5) VALUES (?, ?, ?, ?, ?);" for(var i = 0; i < foo5.length; i++) { client.execute(insert2, [foo, foo2, foo3, foo4, foo5[i]], {prepare : true}, function(err, result) { if(err) throw err; }); } 是主键):

col

我想为数组 col | col2 | col3 | col4 | col5 ---------+---------+-----------+--------+-------- 8909265 | text | 8759 | 5332 | 7480 1769288 | text | 8759 | 5332 | 7480 中的每个值添加一行。这是预期的结果。我怎样才能做到这一点:

foo5

假设 col | col2 | col3 | col4 | col5 ---------+---------+-----------+--------+-------- 8909265 | text | 8759 | 5332 | 1234 1769288 | text | 8759 | 5332 | 5678 3254786 | text | 8759 | 5332 | 9101112 4357234 | text | 8759 | 5332 | 1314151617

更新

按照someRandomSerbianGuy的建议添加递归函数后,这就是我的代码:

foo5 = {1234, 5678, 9101112, 1314151617};

我仍然得到相同的结果。

2 个答案:

答案 0 :(得分:0)

这是因为Node.js是异步的。您可以为此使用Promises,或者使用递归函数来代替循环。

通过使用递归函数代替循环,您可以使其完成client.execute,而不是使用不同的数据再次触发它。通过使用for循环,您只需使用相同的数据调用client.execute次。

示例(对于Node.js中的递归,请注意有更好的方法来编写它,但我想简化它以便您理解语法):

function recursion(i, howManyTimes){ //First you define function
    if(i === howManyTimes){ //If it's called enough times just escape recursion
        return;
    }else{
        //Your code for DB should be here, after successful .execute call call line under this one!
        recursion(++i, howManyTimes);
    }
}
recursion(0, 5); //You can call your function now since you defined it

答案 1 :(得分:0)

切换到promisified客户端模块并使用异步功能。您需要在Node中研究promises和async函数。它需要一些时间来适应它,但是是必要的,因为这种类型的问题一直在回调中发生。

代码将更简单,它将以更直接的方式工作,一次只插入一次:

You need to resize your feature graphic. The required dimensions are 1024 w x 500 h.