javascript - 如何使用Javascript从未知大小的数组中获取未知大小的数据?

标签 javascript arrays node.js

任务是从列对象中获取部分数据并将其发送到数据库。这些部分的最大尺寸必须为 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++;
}

例如,当 insertMaxRows2 时,此代码应将数组中的前 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/

相关文章:

javascript - Vue.js 路由器查询数组

javascript - 无法在 Leaflet 1.0.2 和 1.1-dev 上设置分数缩放

javascript - JS 不与 asp.net 更新面板一起运行

http - 使用 Nodejs HTTP 服务器的自定义 HTTP 方法

javascript - npm run watch 终端错误, "did you forget to signal async completion",有人可以回答吗?

javascript - 将选择器 $(this) 传递给函数的简单方法

arrays - 尝试返回数组时为 "ambiguous subscript"

c++ - 选择排序数组

c++ - 使用 memset 而不是 for 循环来初始化 int 时出现段错误**

javascript - 在回调中改变数组