2016-03-20 7 views
2

にコールバックとして、モジュールのローカル関数を呼び出すと、私は次の操作を行いますは、「要求」私のメインのコードで

var request = require('request'); //using of npm "request" 

exports.FooB = function(data){ /*operations on data here*/ }; 

exports.FooA = function(callback){ 

    var url = some_link; 

    request(url, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      callback(body); 
     }; 
    }); 

}; 

問題は、その明らかである:

var module = require('./module') 

module.FooA(module.FooB); 

module.jsは、次のコードが含まれていますcallback(body)は、条件が満たされても実行されません。 var result = request(url)の後にexports.FooB(result)がありますが、私が見る限り、明らかにコールバックのように振舞わず、問題を引き起こします。

このような場合にコールバック関数を定義する適切な方法は何ですか?私はまったく必要ですか、それとも実際には同期していて、気づきませんでしたか?

+0

私はあなたの投稿コードを試してみました、それは問題が別の場所で、正常に動作します。 200/OKをリクエストしてもよろしいですか? http://jsonplaceholder.typicode.com/usersで試してみることはできますか? – Shanoor

+0

@ShanShan申し訳ありませんが、私は完全にはっきりしていませんでした。このコードはバックエンド側で実行されるため、構文エラーがあればHTTP 500で応答します。動作するかどうかをテストするには、フロントエンドから変数を送り、 'FooB'で変数を変更して返信して書き出します。問題は文法エラーがないにもかかわらず、**私は旅館の 'FooB'を変更したことはありません。したがって、私はその内容が実行されないと仮定します。 –

+0

何も想定しないで、すべてのステップでconsole.logを入れて、あなたが投稿した構造が私のために働きます。 – Shanoor

答えて

2

エラーのある最初の関数コールバックパラメータを使用します。これはnode.jsコアのデフォルトであり、プロジェクト関数用のgoogleです。

そして@ShanSanのようなデバッグのためににconsole.logconsole.errorまたはconsole.traceを使用し、称賛。

例:

var request = require('request'); //using of npm "request" 

exports.FooB = function(error, data){ /*operations on data here*/ }; 

exports.FooA = function(callback){ 

    var url = some_link; 

    request(url, function (error, response, body) { 
     if (error || response.statusCode != 200) { 
      // pass error to callback and if use return you dont need other code block bellow 
      console.error('Error in request', error); 
      return callback(error, null); 
     } 

     // here run if dont have errors 

     // if need more info use the console.log(request); or console.log(body); 

     // use error in first param in callback functions 

     callback(null, body); 
    }); 

}; 
+1

実際には、問題の性質を考慮していなかったことが原因で、変数が送信されなかったことがわかりました。 'console.log'は私に気付かせました。しかし、私がよく理解していれば、あなたのソリューションはエラー処理を提供するので、それは素晴らしいことです。 –