我正在尝试使用数组将多个值插入到nosql数据库cassandra中,但是当我使用下面的代码时,它不会为exports.updateDatabase = functions.https.onRequest((req, res) => {
// ...
});
中存储的每个值添加一行,而只会添加一行两排。添加的两行在foo5
和col5
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};
我仍然得到相同的结果。
答案 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.