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


对于这个问题,我将不胜感激。

最佳答案

这里有很多问题。


thevcreate是本地的。您没有将create的返回值分配给任何内容,因此仍然无法定义。
var thev = [];不应在for循环内。最终只会包含一个元素。还是会的,但是……
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
});

08-17 13:09