Javascript 从SQL获取结果时函数出现故障

Javascript 从SQL获取结果时函数出现故障,javascript,sql,node.js,Javascript,Sql,Node.js,当一个现有的SQL记录存在时,我想使用它,而不是添加另一个,但如果它还不存在,我想添加它。我遇到的问题是,当调用我的Node.js应用程序的端点时,它没有以正确的顺序执行,因此在我检查其长度以查看是否需要添加新记录后,将执行SQL查找以查找现有记录 // it does this second let existingGet = "SELECT * FROM Items WHERE name = '" + productName + "'"; let ex

当一个现有的SQL记录存在时,我想使用它,而不是添加另一个,但如果它还不存在,我想添加它。我遇到的问题是,当调用我的Node.js应用程序的端点时,它没有以正确的顺序执行,因此在我检查其长度以查看是否需要添加新记录后,将执行SQL查找以查找现有记录

// it does this second
let existingGet = "SELECT * FROM Items WHERE name = '" + productName + "'";
let existingItem = async () => {
    db.query(existingGet, function (err, rows, fields) {
        return rows;
    });
};

// it does this first
if (await existingItem().length > 0) {
    // Existing found, use existing
    itemId = existingItem.ID;
} else {
    // Item not found, create new
    var sql = "INSERT INTO Items (...) VALUES (...)";
    await db.query(sql, async function (err, result) {
        itemId = existingItem.affectedRows.ID;
    });
}

期望的结果是,它在第二部分之前执行第一部分,因为第二部分需要第一部分的结果。

尝试删除外括号,以便现有项将从查询中接收结果

//这一秒就完成了
让existingGet=“从name=”+productName+“”的项目中选择*;
//拆下的外支架
让existingItem=async()=>
查询(existingGet,函数(错误、行、字段){
返回行;
});
//它先这样做
如果(等待existingItem().length>0){
//找到现有的,使用现有的
itemId=existingItem.ID;
}否则{
//未找到项目,请创建新项目
var sql=“插入项目(…)值(…)”;
wait db.query(sql,异步函数(err,result){
itemId=existingItem.affectedRows.ID;
});
}

使用sql命令在单个数据库调用中执行此操作

"INSERT INTO Items (...) VALUES (...)
WHERE NOT EXISTS (SELECT 1 FROM Items WHERE name = ...)"

并使用sql命令参数,而不是串联,以避免sql注入。

谢谢您的建议。我试过了,但还是坏了。它在得到结果之前检查长度