我在nodeJS中序列化一些函数时遇到问题。我想要做的是创建一个临时视图,读取它,然后为ft数组中的每个元素删除它。这是我的代码。我在NodeJS中使用以下函数。 Db是节点的sqlite3插件。
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 :(得分:0)
您的问题可能与您认为自己的问题不同。并不是每个项目都没有运行afterView,而是在运行第一个afterView实例之前创建了所有视图。这来自于javascript中采用回调的方法的异步性质(不知道你正在使用的框架/库,但这是常态)。
您需要做的是确保一次只创建一个视图,并等到afterView完成后再继续下一个视图。