4

私はnodejsに比較的慣れていません。私は最近、過去数か月で集めた集合的な知識をすべてプロジェクトにプールしています。nodejsで最初の「ブロッキング」の問題に遭遇したと思います。

request()非同期でネストされた2つの呼び出しをロードするページがあります。最も内側のものは、最も内側のデータを使用してユーザーをリダイレクトします。

  request(parameters,function(error, response, data){
      //the first request passes a token  
      request(newParamters,function(error, response, data){
          //the second request passes a url
          res.redirect(data.info.url);
      });
  });

エラーは、多くのブラウザ タブでこれを開くと、最初の 2 つの後に壊れてしまい、サーバーdata.info.urlが未定義であると言うということです。

あなたへの私の質問は:一度に 1 つの要求だけを実行する必要がありますか? 最初のトークンを保存してrequest()、ユーザーを 2 番目にリダイレクトできrequest()ますか? 私は非同期でブロックしないことについて非常に良心的であり、これが起こっていることにショックを受けています。どんなフィードバックも素晴らしいでしょう!

4

1 に答える 1

7

このようにネストすると、多くの問題が発生します。

私はこのパターンを好みます。すべてを読みやすい名前付き関数に分割する方法です。

関数が完了すると、次の関数が呼び出されます。

parameters = {};   //define parameters
first(parameters); // call first function to kick things off.

var first = function(parameters) {

      request(parameters,function(error, response, data){
         newParamters = date.something;        
         second(newParamters, data); //call second function         
     });
};

var second = function(newParamters, data){

      request(newParamters,function(error, response, data){
          res.redirect(data.info.url);
     });
}

このパターンは「ノンブロッキング」であるため、最初のリクエストが行われると nodejs プロセスが終了し、レスポンスが受信されたときにのみ続行され、2 番目の関数が呼び出されます。

2 番目のリクエストが行われると、nodejs プロセスは再び終了します。リダイレクトは、応答が受信された後にのみ発生します。

于 2012-08-25T05:47:52.023 に答える