私がmysqlテーブルに挿入する必要があるjson形式(または任意の形式)の値のリストがあるとします。挿入後、mysql.queryの呼び出しの外側にあるresult.insertIdが必要です。それを行う方法はありますか? (なぜなら、なぜこれが必要なのか私に尋ねないでください:私はこれを回避する方法を知っています。このシナリオが可能かどうかを知る必要があります)。理想的には、各配列項目の説明と挿入IDが画面に表示されます。代わりに、私は空の配列を取得します。はい、私はconsole.logをの中に入れてコールバックのがこれを達成することを知っています。それは私が必要とする答えではありません。インサートIDをコールバックの外部に公開することは可能ですか?node.js mysql insert id - 挿入クエリの外側に挿入IDを公開するにはどうすればよいですか?
var todos = require('./todos.json');
var mysql = require('mysql');
var mysql_pool = mysql.createPool({
host : 'localhost',
user : 'myuser',
password : 'mypwd',
database : 'mydb'});
var todoArray = [];
todos.forEach(function(todo) {
mysql_pool.query("INSERT INTO todos(description) VALUES(?)", todo.description, function(err, result){
if (err) {
console.log(" Unable to insert: " + err);
throw err;
}
todoArray.push({description: todo.description, desc_id: result.insertId});
});
});
console.log(todoArray);
クエリ機能は非同期なので、クエリが完了する前に、あなたにconsole.logが実行されています。値を使用する場合は、コールバックでそれらの値を処理する必要があります。また、ループ内でクエリを実行しているために問題にぶつかります。なぜなら、それらが非同期であるため、どのような順序で完了するか保証できません。 –
@BrianGlazなぜこれを回答として追加しないのですか?おそらく、query()メソッドのnode.jsドキュメントを指すリンクで拡張されています。 – Shadow
それでは、代わりに同期方式を使用するのが答えでしょうか? –