将外部循环参数传递给Promise解析

问题描述 投票:0回答:1

我有一个用于查询数据库的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返回一个Promise)。但是这种方式会打印错误的idx,因为在解决承诺后idx的值会增加。

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

node.js asynchronous promise resolve pg-promise
1个回答
1
投票

使用let代替var

更改此:

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

对此:

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

let将为循环的每次迭代维护变量的单独副本,以便每个循环都有其自己的变量,因此在.then()循环完成后调用的异步for处理程序仍将具有idx自己的副本中的适当值。

© www.soinside.com 2019 - 2024. All rights reserved.