私は、項目の配列がありますループ、配列を、配列の各エントリの前のクエリの結果に基づいて、私のSQLクエリを実行
var myArr = ['item1', 'item2', 'item3'];
私はこれらの項目をループにしようとしていますが、彼らがいるかどうかをチェック私のデータベースに存在します。アイテムが存在しない場合は、データベースに追加します。
var sql = 'Select * from DB where item="' + myArr[i] + '"';
connection.query(sql, function(e, r, f) {
if(!e && r.length <= 0) {
performInsertOnDB(myArr[i]);
}
});
私の問題は、変数iへの参照がconnnection.queryが非同期であるために残らないことです。私は続ける前に最初の選択が終わるまで待つ必要があります。私は、これを達成するために非同期ライブラリを使用しようとしているが、私は完全にタスクを実行する方法を掴んではいけません。
これは私がこれまで持っているものです。
async.each(lootArray, function(lootItem, addLootItem) {
var sql = "SELECT * FROM loot_history WHERE date = DATE('" + moment(lootItem[1]).format('YYYY-MM-DD') + "') AND time = '" + lootItem[2] + "' AND itemId = " + lootItem[4];
connection.query(sql, function(error, results, fields) {
if (error) {
sendDiscordMessage(loachannel, error + ', <@105094681141977088>');
return false;
} else {
if (results.length > 0) {
//duplicates.push(lootArray[i]);
} else {
addLootItem(lootItem);
}
}
});
}, function(err) {
// if any of the file processing produced an error, err would equal that error
if (err) {
// One of the iterations produced an error.
// All processing will now stop.
console.log('A file failed to process');
} else {
console.log('All files have been processed successfully');
}
});
function addLootItem(lootItem) {
var sql = "INSERT INTO loot_history SET player = " + lootItem[0] + ", date = " + moment(lootItem[1]).format('YYYY-MM-DD') + ", time = '" + lootItem[2] + ", item = " + lootItem[3] + ", itemId = " + lootItem[4] + ", itemString=" + lootItem[5] + ", response= " + lootItem[6] + ", votes= " + lootItem[7] + ", class= " + lootItem[8] + ", instance=" + lootItem[9] + ", boss=" + lootItem[10] + ", gear1=" + lootItem[11] + ", gear2=" + lootItem[12] + ", reasponseId=" + lootItem[13] + ", isAwardReason=" + lootItem[14];
connection.query(sql, function(error, results, fields) {
if (error) {
sendDiscordMessage(loachannel, error + ', <@105094681141977088>');
}
});
}
はEDIT:すべてはAddLootItemが発射されていないコールバックを除き、動作します。このコールバックが呼び出されないのはなぜですか?実行するif文でログイベントを設定できますが、関数自体は決して起動しません。
あなたは私のヒーローです。ご理解いただきありがとうございます。 – Smak
あなたは歓迎です:) –