0

forMySQL サーバーからデータをプルするループがあります。後で使用できるように、4 つの値を変数に入れたいと思います。これが私が持っているコードです。何らかの理由で、それ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ループ内に入れないでください。1 つの要素のみを含むことになります。またはそうなるでしょうが…</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 に答える