【问题标题】:Creating variable array object with for loop使用 for 循环创建可变数组对象
【发布时间】:2013-07-25 23:13:37
【问题描述】:

我有一个for 循环,可以从 MySQL 服务器中提取数据。我希望将这四个值放入变量中,以便以后使用它们。这是我的代码;出于某种原因,它说thev 未定义?

create();

function create(){

for(var i=0;i<4;i++){

        var thev=[];

        client.query('SELECT curattend FROM table1 WHERE ind=?',[i], function(err,result){
        thev[i] = result[0].curattend;

        });

        }
        return thev;
}
  console.log(thev[2]);

我将不胜感激有关此问题的任何建议。

【问题讨论】:

  • @minitech 那个“可能”是关于“[可能]”的(因为它在技术上是可能的......但是哦,麻烦了)。不过,我应该使用更严格的语言 - 感谢您指出。

标签: javascript mysql node.js for-loop


【解决方案1】:

这里有很多问题。

  1. thevcreate 的本地。您没有将 create 的返回值分配给任何东西,所以它仍然不会被定义。

  2. var thev = []; 不应在 for 循环内。它最终只会包含一个元素。或者它会,但是……

  3. query 的回调不仅仅是为了好玩;这是一个异步调用,并且 100% 确定在您实际从函数返回时还没有发生。

我会使用 async 库来实现:

function range(start, end) {
    var result = [];

    while(start < end) {
        result.push(start);
        start++;
    }

    return result;
}

async.map(range(0, 4), function(i, callback) {
    client.query('SELECT curattend FROM table1 WHERE ind = ?', [i], function(err, result) {
        if(err) return callback(err);
        callback(null, result[0].curattend);
    });
}, function(err, thev) {
    // Continue
});

【讨论】:

  • 我没有注意到内部循环的异步。
猜你喜欢
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 2017-08-09
  • 2022-08-11
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多