1

このコードが $products を空に戻すのはなぜですか? 関数内で $products をテストすると、データが表示されます...しかし、終了するとデータを取得できないようです。

var $products = new Array();
connection.query($sql, function(err, rows, fields) {
    if (err) throw err;
    for(i=0; i< rows.length; i++)
    {
        $products[rows[i].source_identifier] = "xyz";
    }

});
connection.end();

console.log($products); // Shows empty.
4

1 に答える 1

2

空ではありませんreturn声明はありません。問題は、操作が非同期であることです。呼び出しが実行されるときconsole.log()、クエリはまだ完了していません。

ループの後、そのコールバック関数console.log()に呼び出しを移動します。(「i」も!!! で宣言)forvar

このようなコールバックを含む API を使用することの要点は、操作が非同期であるという事実に対処することです。それらが同期している場合、そのようなインターフェイスを設計するのは奇妙です。

于 2012-11-01T22:58:33.447 に答える