2017-09-11 6 views
0

私のnodejsスクリプトと非同期ライブラリに問題があります。 Iveは2部構成のasync.autoを手に入れました。最初の部分は大丈夫ですが、2番目の部分では、ほぼ同じ2つの部分を持つ別のasync.auto、SQLクエリと配列の変更があります。しかし、ここの最初の部分は正常に動作し、2番目の部分はzutKopfがコールバック関数cbzutkが関数ではないというエラーで停止します。私はいつかそれを固定しようとしたが、最初の部分zubKopfのように書かれているので、失敗を見つけることができません。ノードAsync.autoコールバックは関数ではありません

うまくいけば、私を助けることができます。

機能に依存async.autoで

async.auto({ 
    one: function(cbone){ 
     db.getConnection(function(err, dbs){ 
      dbs.query("insert into rezepte (kat_id, rez_name, rez_desc, rez_img) values(?,?,?,?)",[RezeptComp.rezept.kat_id,RezeptComp.rezept.rez_name,RezeptComp.rezept.rez_desc,RezeptComp.rezept.rez_img],function(err, rows) { 
       if (err) { 
        cbone(err); 
        return; 
       } 
       console.log('query Rezept'); 
       rezeptId = rows.insertId; 
       RezeptComp.rezept.rez_id = rows.insertId; 
       dbs.release(); 
       cbone(null); 
      }); 
     }); 
    }, 
    two: ['one', function(cbtwo){ 
      async.auto({ 
       zubKopf: function(cbzubk){ 
        async.eachSeries(RezeptComp.zubereitung, function(data,next){ 
         db.getConnection(function(err,dbzubk){ 
          dbzubk.query("insert into zubereitungKopf (rez_id, zubk_text) values("+ rezeptId +",'"+ data.zubk_text +"')",function(err, rows) { 
           if (err) { 
            cbtwo(err); 
            return; 
           } 
           console.log('query zubk'); 
           zubkId = rows.insertId; 
           RezeptComp.zubereitung[zubkd].zubk_id = zubkId; 
           dbzubk.release(); 
           async.eachSeries(data.zubp, function(data2,next2){ 
            db.getConnection(function(err,dbzubp){ 
             dbzubp.query("insert into zubereitungPos (zubk_id, zubp_text) values("+ zubkId +",'"+ data2.zubp_text +"')",function(err, rows) { 
              if (err) { 
               cbtwo(err); 
               return; 
              } 
              console.log('query zubp'); 
              zubpId = rows.insertId; 
              RezeptComp.zubereitung[zubkd].zubp[zubpd].zubp_id = zubpId; 
              dbzubp.release(); 
              zubpd = zubpd + 1; 
              next2(null); 
             }); 
            }); 
           }, function(err, results){ 
            zubkd = zubkd + 1; 
            zubpd = 0; 
            next(null); 
           }); 
          }); 
         }); 
        }, function(err, results){ 
         cbzubk(null); 
        }); 
       }, 
       zutKopf: ['zubKopf', function(cbzutk){ 
        async.eachSeries(RezeptComp.zutaten, function(data3,next3){ 
         db.getConnection(function(err,dbzutk){ 
          dbzutk.query("insert into zutatenKopf (rez_id, zutk_text) values("+ rezeptId +",'"+ data3.zutk_text +"')",function(err, rows) { 
           if (err) { 
            cbzutk(err); 
            return; 
           } 
           console.log('query zutk'); 
           zutkId = rows.insertId; 
           RezeptComp.zutaten[zutkd].zutk_id = zutkId; 
           dbzutk.release(); 
           async.eachSeries(data3.zutp, function(data4,next4){ 
            db.getConnection(function(err,dbzutp){ 
             dbzutp.query("insert into zutatenPos (zutk_id, zutp_text) values("+ zutkId +",'"+ data4.zutp_text +"')",function(err, rows) { 
              if (err) { 
               cbzutk(err); 
               return; 
              } 
              console.log('query zutp'); 
              zutpId = rows.insertId; 
              RezeptComp.zutaten[zutkd].zutp[zutpd].zutp_id = zutpId; 
              dbzutp.release(); 
              zutpd = zutpd + 1; 
              next4(null); 
             }); 
            }); 
           }, function(err, results){ 
            zutkd = zutkd + 1; 
            zutpd = 0; 
            next3(null); 
           }); 
          }); 
         }); 
        }, function(err, results){ 
         cbzutk(null); 
        });  
       }], 
       final: ['zubKopf', 'zutKopf', function(error, results){ 
        cbtwo(null); 
       }] 
      }); 
    }], 
    final: ['one', 'two', function(error, results){ 
     callback(RezepComp); 
    }] 
}); 
+0

私は本当にこれを調べる時間がありませんでしたが、私が試みる最初の試みは、 'zutKopf'のすべての呼び出し元を見て、実際の' function() 'がパラメータリストに渡されることを確認することです。たとえば、誤って文字列を渡している可能性があります。 –

答えて

0

に挨拶は、前の関数からである第1のパラメータを受け取り、その後、two: ['one', function(parameter, callback)代わりにtwo: ['one', function(callback)ようfunctionheaderにコールバックを定義することができます。

関連する問題