任务是从列对象中获取部分数据并将其发送到数据库。这些部分的最大尺寸必须为 insertMaxRows。
我尝试了一些迭代并使用模运算符。然而我还是一个初学者,无法解决这个问题。
var insertMaxRows = utils.GetInsertMaxRows(); //right now its 2
var idx = 1;
for (var i = 0; i < columns.id.length; i++) {
if (idx % insertMaxRows == 0){
var params = [];
//this takes just 1 value, i know
params.push(columns.codes[idx -1]);
params.push(columns.product_id[idx -1]);
params.push(columns.id[idx -1]);
updateSql = "UPDATE TProductCodes SET code =?, product_id =? WHERE id =?";
sql.query(connection, params, etc, callback) {
//sends stuff to database
});
idx++;
}
例如,当 insertMaxRows
为 2
时,此代码应将数组中的前 2 项发送到数据库,然后是下 2 项,依此类推,然后剩下的就是有的了。
请注意,这是针对 NODE JS 的,如果有关系的话,它将通过异步函数发送到数据库。
最佳答案
这是我可能会采取的方法。它迭代数据并创建一个新的 Promise包含每个数据 block 的 UPDATE 调用(我 splice
从数组中删除)。您可以使用Promise.all
等待所有更新完成。
// set up the data
const data = [];
for (let i = 0; i < 100; i++) {
data.push(i);
}
function UPDATE(data) {
return new Promise(resolve => {
// mimic an SQL UPDATE query
setTimeout(() => resolve(), 2000);
});
}
function getPromises(data, limit) {
const promises = [];
// Iterate through the data, splicing off a chunk at
// a time, and creating a new promise for each
for (let i = 0; i < data.length; i++) {
const chunk = data.splice(0, limit);
promises.push(UPDATE(chunk));
}
return promises;
}
(async () => {
const limit = 12;
// Wait until all the promises have resolved
await Promise.all(getPromises(data, limit));
console.log('Done');
})();
关于javascript - 如何使用Javascript从未知大小的数组中获取未知大小的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56542239/