2016-12-05 11 views
0

私は他のスタックオーバーフローの問題を見てきましたが、私はまだ私のことを理解できません。私は、ブラウザのコンソールでこのエラーを取得しています:Meteor/Javascript関数のエラー - TypeError:コールバックが関数ではありません

Exception in delivering result of invoking 'formMethod1': TypeError: callback is not a function 

私は以下のコードとラインエラーの参照にコメントを入れています。 "err"オブジェクトは渡されていないようですが、コールバックは実際に呼び出されていて、すべてが処理されます。エラーは検出されません。

submitForm1(entry, 
 
\t processForm1(err,res,entry,function(err,res){ 
 
\t \t //Done processing 
 
\t \t console.log(err); //Doesn't work 
 
\t \t console.log(res); //Doesn't work 
 
\t \t console.log("Done"); //Works 
 
    }) 
 
) \t \t \t 
 

 
function submitForm1(entry, callback) { 
 

 
    Meteor.call('formMethod1', { 
 
      params: { 
 
       user: Meteor.user().username, 
 
       activity: entry 
 
      } 
 
     }, function(err,res){ 
 
      if(err){ 
 
      \t console.log(err) //Works 
 
       callback(err, res, entry) //This is where the error happens 
 
      } else{ 
 
       callback(undefined, res, entry) 
 
      } 
 
     } 
 
    ); 
 
} 
 

 
function processForm1(err, res, entry, callback) { 
 
\t console.log(err); //Doesn't work 
 
\t console.log(res); //Works 
 
\t console.log(entry); //Works 
 
    if (err) { 
 
     if (err.error == "1001") { //Activity not found 
 
      //Handle Error 
 
      callback("Activity Not Found"); 
 
     } else { 
 
      //Handle Error 
 
      callback(err.message); 
 
     } 
 
    } else { //No Errors 
 
     callback(undefined,"Submitted"); 
 
    } 
 
}

EDIT:あなたのすべては私が正しい方向に向かってしまいました。

submitForm1(entry, function(err,res){ 
 
    processForm1(err,res,entry,function(err,res){ 
 
     //Done processing 
 
\t \t console.log(err); 
 
\t \t console.log(res); 
 
\t \t console.log("Done"); 
 
    }) 
 
});

+0

processForm1は関数を返しません。それを呼び出してその結果をコールバックとして使用するには、関数を返す必要があります。 –

+0

submitForm1を呼び出すときに2つのレベルのコールバックを使用していますが、それはロジックを少し複雑にしているからです。 – Yaser

答えて

1

あなたがコールバックとして渡す関数を呼び出し、代わりに...それを渡したが、その後それへの引数として別の関数を渡している:ここでは修正されたコードです。私はあなたが間違ったミックスで同じ機能の2つのフレーバーを混ぜ合わせたと思う。このように修正:

submitForm1(entry, 
    function (err,res,entry) { 
     //Done processing 
     console.log(err); 
     console.log(res); 
     console.log("Done"); 
    } 
)   
+0

ありがとうございます!これは私を正しい方向に向かわせました。私は、トラブルシューティングに役立たなかった「res」オブジェクトも継承していたことが分かります。固定コードで質問を更新します。 – dotbat

+0

質問の編集では、コールバックコールに渡された3番目の引数がどこにもありません。 – trincot

+0

ありがとうございます。私もそれを逃した。 – dotbat

1

あなたはsubmitForm1へのコールバックとしてprocessForm1を渡しています。これを行う場合は、processForm1と呼ばれる署名が(err, res, entry, callback)と一致していることを確認する必要があります。

これは、その内部でコールされるsubmitForm1内のコールバックとしてメソッドを渡す必要があることを意味します。意味がありますか?

 function submitForm1(entry, function(err,res,entry,function(err,res){ 
      //Done processing 
      console.log(err); //Doesn't work 
      console.log(res); //Doesn't work 
      console.log("Done"); //Works 
    }) { 

    Meteor.call('formMethod1', { 
      params: { 
       user: Meteor.user().username, 
       activity: entry 
      } 
     }, function(err,res){ 
      if(err){ 
       console.log(err) //Works 
       callback(err, res, entry) //This is where the error happens 
      } else{ 
       callback(undefined, res, entry) 
      } 
     } 
    ); 
} 

はありませんあなたは間違っているものを参照してください。簡単にするために

はのは、このようにそれを入れてみましょう。

関連する問題