0

私はnode.jsの世界の初心者なので、私の質問はあなたにとって奇妙かもしれません. 私は非常に簡単なシナリオを持っています:1)dbに行を挿入し、この行のIDを取得します2)複数の行を挿入し、それぞれが以前に取得したIDを使用します

フローに問題があります... ステージ 1 からの応答を受け取る前にステージ 2 が開始されるか、挿入が完了する前にすべてのステージが終了します (connection.end() が呼び出されます)。

async モジュールを使用しようとしましたが、役に立ちません。コードを見てみましょう。

// open connection

conn.query('INSERT INTO receipt SET ?', {postid: postGUID, body: body}, function(err, result) {
    if (err) throw err;
        console.log("ID: "+result.insertId );

    conn.query('INSERT INTO imgs SET ?', {postid: result.insertId, link: imgSrc}, function(err, result) {
        if (err) throw err;

    });
});

conn.end( function(err) {
    console.log("CLOSE CONNECTION"); 
    console.log(err);
});

それを手伝ってくれませんか?

4

1 に答える 1

2

conn.query はおそらく非同期であるため、クエリが完了する前に接続を閉じています。簡単な修正は次のとおりです。

conn.query('INSERT INTO receipt SET ?', {postid: postGUID, body: body}, function(err, result) {
    if (err) throw err;
        console.log("ID: "+result.insertId );

    conn.query('INSERT INTO imgs SET ?', {postid: result.insertId, link: imgSrc}, function(err, result) {
        if (err) throw err;

       conn.end( function(err) {
          console.log("CLOSE CONNECTION"); 
          console.log(err);
       });
   });
});

おそらく、プロセスが終了したときに接続を閉じることをお勧めします。

于 2012-08-11T21:05:27.180 に答える