2016-09-28 12 views
0

私はnode-rest-clientを使用してエンドポイントにGET呼び出しを行い、この呼び出しを複数回(ループ内で)行い、応答のパラメータを公開します。
コードは次のようになります。ノードJSループとコールバック

// registering remote methods 
client.registerMethod("reflect", "<the URL>", "GET"); 
// call the method 
var i = 10; 
while (i>0) { 
    client.methods.reflect(function (data, response) { 
     console.log("x-forwarded-for: " + data.headers["x-forwarded-for"]); 
     // raw response 
     //console.log(response); 
     }); 
    i--; 
} 

私が手にエラーがある:

TypeError: Cannot read property 'x-forwarded-for' of undefined 

iが2に等しい場合、これはOKです。 私はこの問題が非同期実行であり、その間のすべての呼び出しが一度に起動され、行のどこかで目詰まりが発生していることが原因であると考えています。

同期実行を行う最良の方法は何ですか(これが問題の原因です)。

+0

のような匿名関数の内部で、この呼び出しをラップしてください[async for node.jsの複製](http://stackoverflow.com/questions/21184340/async-for-loop-in-node-js) – DrakaSAN

+0

'async'のような制御フローライブラリを使うか、それを行う再帰。約束も働くだろう。 – DrakaSAN

+0

ありがとうございます - はい、私は問題を解決すると信じてこれを見た:https://github.com/caolan/async/blob/v1.5.2/README.md#whilst – Christian68

答えて

0

まずX-転送-のために嘘応じてチェックして、あなたは(非同期呼び出しを)期待しているのと同じ問題が解決しない場合は、その後 ちょうどこの

可能
while(i > 0) { 
    (function abc(){ 
     client.methods.reflect(function (data, response) { 
      console.log("x-forwarded-for: " + data.headers["x-forwarded-for"]); 
      // raw response 
      //console.log(response); 
     }); 
    }()) 

    i--; 
} 
+0

ラッピングのポイントはありません。内部コールバック関数i変数は使用されません。 –

+0

この変数を削除するだけで問題ありません –

関連する問題