将外循环参数传递给 Promise resolve

Pass outer loop parameter to a Promise resolve

我有一个用于查询数据库的 for 循环。我希望数据库调用是异步的。 这是代码的结构:

for(var idx=0; idx<arr.rows.length; idx++)
{
  db.query(`SELECT ...`)
    .then((result) => {
          console.log("Value is: " + result.rows[idx].val);
    });
}

如您所见,我希望在解析中打印参数 idxdb.query returns a Promise)。但是这种方式会打印出错误的 idx,因为 idx 值会在 promise 被解决时递增。

传递变量的正确方法是什么idx? 谢谢。

使用 let 代替 var

由此变化:

for(var idx=0; idx<arr.rows.length; idx++)

对此:

for(let idx=0; idx<arr.rows.length; idx++)

letfor 循环块的块范围,并且将为循环的每次迭代维护一个单独的变量副本,以便每个人都有自己的,因此你的在 for 循环完全完成后调用的异步 .then() 处理程序在其自己的 idx.

副本中仍将具有适当的值