0

私はnode.jsをいじり回しており、Faker、アンダースコア、mysql、およびrandyライブラリを使用して、いくつかのテストデータをWebアプリに追加しています。

これまでのところ良好ですが、私のループの1つでは、mysql呼び出しは毎回失敗しますが、エラーの生成にも失敗します。私は少し困惑しています:

var sql = 'SELECT id FROM mytable WHERE 1';
client.query(sql, function(err, rows, fields){
    // loop through results
    _.each(rows, function (v, i){
        // get the insert id
        var id = v.id; 
        console.log (id); // prints valid ID            
        // generate other data
        var stuff_count = randy.randInt(0,12);
        _(stuff_count).times(function(n){
            var sql = 'INSERT INTO other_table (linked_id, item_id) VALUES ('+id+','+randy.randInt(1,50)+')';
            console.log(sql); // prints sql
            client.query(sql, function(err, rows, fields) {
              console.log(sql); // prints nothing
              if (err){
                console.log(sql); // prints nothing
                throw err; // prints nothing
              }
        });
    });
});

ループロジックは正常に機能しており、SQLが-INSERTに対して実行する必要がある場所までother_table到達しますが、mysqlログをテーリングすると、DBにヒットするものは何も表示されず、client.queryブロック内のデバッグステートメントはいずれも成功時に何も出力しません。失敗。

4

1 に答える 1

0

これをスタンドアロンで実行していると仮定すると、挿入を行う前にコードが終了する可能性があります。

_(stuff_count).times(...) の後に setTimeout(..., 10000) を配置します

_().times() を使用すると、すべての挿入をキューに入れますが、完了を待ちません。すべての挿入が完了するまで確実に待機するには、制御フロー ライブラリを使用する必要があります。

于 2013-01-28T20:07:45.860 に答える