2016-09-05 2 views
0

コールバック関数を作成しようとしていますが、それでもdata is not a functionが返ってきています。私は別の質問に従ってそれを設定しましたが、うまくいかないでしょうか?ノードでコールバックをリクエストする

場合
getRequest("http://", function(error, data){ 
    console.log(data); 
}); 

function getRequest(url, error, data) { 
    request({ 
     method: 'GET', 
     uri: url, 
     headers: { 
     'Content-Type': 'application/json', 
     'dataType': 'json'} 
    }, function (error, response, body){ 
     if(!error && response.statusCode == 200){ 

     data(JSON.parse(body)); 

     } else { 
     error(error); 
     } 
    }) 
} 
+1

2つのパラメータで 'getRequest'を呼び出しています。第3の 'data'パラメータは' undefined'です。 –

+0

私は見ていますが、この場合どのように見えるでしょうか? –

+0

[Bluebird](http://bluebirdjs.com)のような約束ライブラリを使用して、コールバックを制御し続けることを検討するとよいでしょう。 '(...)'を連鎖することは、関数呼び出しのマッチングよりもずっと簡単です。 – tadman

答えて

1

使用すると、1つのコールバックでは、成功と失敗の結果の両方を続行したい場合は、あなたのコードにあったようにcb(またはerrordataを呼び出す置き換える必要があります。

getRequest("http://", function(error, data){ 
    if(error) throw error 
    console.log(data) 
}); 

function getRequest(url, cb, data) { 
    request({ 
     method: 'GET', 
     uri: url, 
     headers: { 
     'Content-Type': 'application/json', 
     'dataType': 'json'} 
    }, function (error, response, body){ 
     if(cb) { 
      cb(error, JSON.parse(body)) 
     } 
    }) 
} 

そうでない場合は、あなたがすべき両方のコールバックが提供されていることを確認してください

function getRequest(url, success, error) { 
    request({ 
     method: 'GET', 
     uri: url, 
     headers: { 
     'Content-Type': 'application/json', 
     'dataType': 'json'} 
    }, function (error, response, body){ 
     if(error && failure) { 
     failure(error) 
     } else if(success) { 
     success(JSON.parse(body)) 
     } 
    }) 
} 

この場合、2つのコールバック関数を用意してくださいより一般的でないパターンであるエラーのための第2のものである。

+0

'function(error、body)'という形式の単一のコールバックを使うことは、ここで一貫しています。 – tadman

+0

@tadman、あなたは絶対に正しいです、私はそれについての発言を追加しましたが、OPのニーズに合っているかどうかは分かりません。 –

+2

Node.jsは物事を一貫性のあるものに保つことに非常に固執しています。私がそれを始めるときには奇妙だと思っていましたが、その習慣はあなたのコードをより整然とした状態に保ちます。矛盾したコールバックメソッドが数十回ある、これまでの野生から西へのアプローチは、歴史の中に消え去っています。 – tadman

関連する問題