0

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

最初のループの各項目に対して 2 番目の関数が実行されるようにする必要があることは明らかですが、方法がわかりません。どんな助けでも大歓迎です

4

1 に答える 1

0

あなたの問題は、おそらくあなたが抱えていると思っている問題とは別のものです。各項目に対して afterView が実行されないということではなく、afterView の最初のインスタンスがまったく実行される前にすべてのビューが作成されるということです。これは、javascript でコールバックを受け取るメソッドの非同期の性質に由来します (使用しているフレームワーク/ライブラリについてはわかりませんが、これが標準です)。

一度に 1 つのビューのみを作成し、afterView が終了するまで待ってから次のビューに進むようにする必要があります。

于 2013-05-05T06:12:27.443 に答える