我试图在knex函数中获取循环值,但得到了循环的最终值。
for (i = 0; i < 10; i++) {
knex_in.raw(query).then(function (result) {
console.log(i)
});
}
需要帮助。
答案 0 :(得分:2)
循环(i
)中的计数器是全局变量。在循环的每次迭代中,您都在创建承诺。到您的诺言完成时,循环就完成了,因此i
是最终值。
解决方案是将i
的值保存在作用域变量中。可以通过几种方法来完成,这有两种:
您可以使用let(取决于ES6支持)
for (let i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i);
}, 500);
}
或者您可以通过创建函数将i
的值存储在作用域变量中:
function someFunction(value) {
setTimeout(function() {
console.log(value);
}, 500);
}
for (i = 0; i < 10; i++) {
someFunction(i)
}