0

我有一个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]);

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

4

1 回答 1

1

这里有很多问题。

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

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

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

我会使用异步库来做到这一点:

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
});
于 2013-07-25T23:18:43.763 回答