2013-05-05 94 views
0

我在序列化nodeJS中的幾個函數時出現問題。我想要做的是創建一個臨時視圖,讀取它,然後將其放入ft數組中的每個元素。這是我的代碼。我在NodeJS中使用以下函數。 Db是節點的sqlite3插件。NodeJS,SQL異步問題

function(){ 
ft.forEach(function(fti){ 
    var view="create temporary view ..."+fti; 
    db.exec(view,aftaView) 
    console.log("created View "+fti); 
}); 
}; 
function aftaView(err){ 
    if (err) console.log(err+" K ");  
    participantID.forEach(function(prt){ 
    Obj.forEach(function(bj){ 
    console.log("Object: "+bj); 
     //perform second query here 
    db.all("select ...", {$pID:prt,$obj:bj}, function(err,rows){ 
     if (err) throw err; 
     rows.forEach(function (row) { 
     //console.log(row); 
     }); 
     //perform third function here, in readiness for second iterarion of the very                   //   first loop 
     db.run("drop view Kemp"); 
     }); 
}); 

});
};

這裏是控制檯輸出:

created View 1 
created View 2 
created View 3 
created View 4 
created View 5 
created View 6 

//fails 

Error: SQLITE_ERROR: view already exists 

我清楚地需要確保第二個功能,在第一循環的每個項目運行時,我只是不知道怎麼辦。任何幫助將不勝感激

回答

0

你的問題可能是一個不同的,你認爲你有。並不是每個項目都不會運行afterView,而是所有的視圖都是在afterView的第一個實例運行之前創建的。這來自JavaScript中回調方法的異步特性(不知道您使用的框架/庫,但這是常態)。

您需要做的是確保您一次只創建一個視圖,並等到afterView完成後再繼續下一個視圖。

+0

我該怎麼做,@Alxandr? – 2013-05-05 06:25:04