循环值无法在节点js中的knex内部工作

时间:2018-09-17 12:33:58

标签: javascript node.js knex.js

我试图在knex函数中获取循环值,但得到了循环的最终值。

for (i = 0; i < 10; i++) {

    knex_in.raw(query).then(function (result) {
                    console.log(i)
    });

    }

需要帮助。

1 个答案:

答案 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)
}