2013-04-28 97 views
1

在Express.js我尝试做以下使用两个查询的序列,其中第二个取决于第一个:节点sqlite3的序列化失败:一个SQLITE_CONSTRAINT:外键约束失败

  1. 我尝试使用第一查询
  2. 得到一个ENTRYID我使用ENTRYID第二查询

据我了解,第二个查询是第一个完成之前调用。还有“console.log(”My entry:“+ 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 

回答

1

您的问题是db.get本身可能被序列化,但是你给db.get回调仍将异步调用。

要解决这个问题,请将db.run调用移入回调。

+0

这很有帮助,谢谢! – FranXh 2013-04-30 00:50:30