在Express.js中,我尝试使用两个查询的序列化来执行以下操作,其中第二个查询取决于第一个查询:
我正在尝试使用第一个查询获取entryID
我在第二个查询中使用该entryID
据我了解,第二个查询在第一个查询完成之前被调用。也是“ console.log(“我的条目:” + data.entryID);“返回正确的entryID。下面,我显示了我正在使用的代码以及出现的错误。任何帮助,将不胜感激。
db.serialize(function(){
db.get("Select entryID from entry where pID=$pID",{$pID:participName},function(err, data){
if(err) throw err;
foundID=data.entryID;
console.log("My entry: "+data.entryID);
});
db.run("insert into observation(entryID, objID, data) values($entryID,1,$intro_counter)", {$entryID:foundID, $intro_counter:intro_counter});
});
events.js:71
throw arguments[1]; // Unhandled 'error' event
^
Error: SQLITE_CONSTRAINT: foreign key constraint failed
最佳答案
您的问题是db.get
本身可能已被序列化,但是您给db.get
提供的回调仍被异步调用。
要解决此问题,请将db.run
调用移到回调中。