将外循环参数传递给 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);
});
}
如您所见,我希望在解析中打印参数 idx
(db.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++)
let
是 for
循环块的块范围,并且将为循环的每次迭代维护一个单独的变量副本,以便每个人都有自己的,因此你的在 for
循环完全完成后调用的异步 .then()
处理程序在其自己的 idx
.
副本中仍将具有适当的值
我有一个用于查询数据库的 for 循环。我希望数据库调用是异步的。 这是代码的结构:
for(var idx=0; idx<arr.rows.length; idx++)
{
db.query(`SELECT ...`)
.then((result) => {
console.log("Value is: " + result.rows[idx].val);
});
}
如您所见,我希望在解析中打印参数 idx
(db.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++)
let
是 for
循环块的块范围,并且将为循环的每次迭代维护一个单独的变量副本,以便每个人都有自己的,因此你的在 for
循环完全完成后调用的异步 .then()
处理程序在其自己的 idx
.