Javascript 循环遍历数组,并根据上一次对数组中每个条目的查询结果执行SQL查询

Javascript 循环遍历数组,并根据上一次对数组中每个条目的查询结果执行SQL查询,javascript,mysql,node.js,asynchronous,async.js,Javascript,Mysql,Node.js,Asynchronous,Async.js,我有一系列的项目: 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) {

我有一系列的项目:

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]);
    }
});
var sql='Select*from DB where item=“”+myArr[i]+'”;
查询(sql,函数(e,r,f){

if(!e&&r.length问题在于异步回调的名称与不存在项时要调用的函数相同。请尝试将函数中的名称更改为其他名称,例如:callback,并在if语句中调用它,或将其传递给addLootItem,并在添加项后在那里调用它

async.each(lootArray, function(lootItem, callback) {
    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>');
            calback(err);
        } else {
            if (results.length > 0) {
                //duplicates.push(lootArray[i]);
                callback();
            } else {
                addLootItem(lootItem, callback);
            }
        }
    });
}, 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, done) {
    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>');
        }
        done();
    });
}  
async.each(lootArray,函数(lootItem,回调){
var sql=“从loot_历史记录中选择*,其中日期=日期(“+”时刻(lootItem[1])。格式('YYYY-MM-DD')+”)和时间=“+”lootItem[2]+”和itemId=“+lootItem[4];
查询(sql、函数(错误、结果、字段){
如果(错误){
sendDiscordMessage(loachannel,错误+',');
卡尔巴克(err);
}否则{
如果(results.length>0){
//重复.push(数组[i]);
回调();
}否则{
addLootItem(lootItem,回调);
}
}
});
},函数(err){
//如果任何文件处理产生错误,err将等于该错误
如果(错误){
//其中一次迭代产生了一个错误。
//所有处理现在将停止。
log('处理文件失败');
}否则{
log('所有文件已成功处理');
}
});
函数addLootItem(lootItem,完成){
var sql=“INSERT INTO loot_history SET player=“+lootItem[0]+”,date=“+moment(lootItem[1])。格式('yyyyy-MM-DD')+”,时间=“+lootItem[2]+”,item=“+lootItem[3]+”,itemId=“+lootItem[4]+”,itemString=“+lootItem[5]+”,response=“+lootItem[6]+”,投票=“+lootItem[7]+”,class=“+lootItem[8]+”,instance=”+lootItem[9]+”,boss=“+lootItem[10]+”,gear1=“+lootItem[11]+”,gear2=“+lootItem[12]+”,reansponseId=“+lootItem[13]+”,isAwardReason=“+lootItem[14];
查询(sql、函数(错误、结果、字段){
如果(错误){
sendDiscordMessage(loachannel,错误+',');
}
完成();
});
}  

问题在于,异步回调的名称与项目不存在时要调用的函数的名称相同。请尝试将函数中的名称更改为其他名称,例如:callback,并在if语句中调用它,或将其传递给addLootItem,并在添加项目后在那里调用它

async.each(lootArray, function(lootItem, callback) {
    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>');
            calback(err);
        } else {
            if (results.length > 0) {
                //duplicates.push(lootArray[i]);
                callback();
            } else {
                addLootItem(lootItem, callback);
            }
        }
    });
}, 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, done) {
    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>');
        }
        done();
    });
}  
async.each(lootArray,函数(lootItem,回调){
var sql=“从loot_历史记录中选择*,其中日期=日期(“+”时刻(lootItem[1])。格式('YYYY-MM-DD')+”)和时间=“+”lootItem[2]+”和itemId=“+lootItem[4];
查询(sql、函数(错误、结果、字段){
如果(错误){
sendDiscordMessage(loachannel,错误+',');
卡尔巴克(err);
}否则{
如果(results.length>0){
//重复.push(数组[i]);
回调();
}否则{
addLootItem(lootItem,回调);
}
}
});
},函数(err){
//如果任何文件处理产生错误,err将等于该错误
如果(错误){
//其中一次迭代产生了一个错误。
//所有处理现在将停止。
log('处理文件失败');
}否则{
log('所有文件已成功处理');
}
});
函数addLootItem(lootItem,完成){
var sql=“INSERT INTO loot_history SET player=“+lootItem[0]+”,date=“+moment(lootItem[1])。格式('yyyyy-MM-DD')+”,时间=“+lootItem[2]+”,item=“+lootItem[3]+”,itemId=“+lootItem[4]+”,itemString=“+lootItem[5]+”,response=“+lootItem[6]+”,投票=“+lootItem[7]+”,class=“+lootItem[8]+”,instance=”+lootItem[9]+”,boss=“+lootItem[10]+”,gear1=“+lootItem[11]+”,gear2=“+lootItem[12]+”,reansponseId=“+lootItem[13]+”,isAwardReason=“+lootItem[14];
查询(sql、函数(错误、结果、字段){
如果(错误){
sendDiscordMessage(loachannel,错误+',');
}
完成();
});
}  

你是我的英雄。谢谢你帮助我理解。你是我的英雄。谢谢你帮助我理解。