2017-06-12 12 views
0

私は非同期APIを実装し、私のルータの中で非同期APIリクエストアクションを要求しています。エンドポイントは単なるクエリ文字列であり、すべての呼び出しの結果で配列またはオブジェクトを返そうとしています。今のところ2つしかありません:Asyncとリクエストパッケージ(NodeJS/Express)を使用した複数のAPI呼び出し

router.get('/', function(req, res) { 
    async.parallel([ 
     function(next) { 
      request(queryString + 'end point string', function(error, response, body) { 
       if (!error && response.statusCode == 200) { 
        var unsPAM = JSON.parse(body); 
       }; 
       console.log(error); 
      }); 
     }, 
     function(next) { 
      request(queryString + 'end point string', function(error, response, body) { 
       if (!error && response.statusCode == 200) { 
        var unsAll = JSON.parse(body); 
       }; 
       console.log(error); 
      }); 
     }], 
     function(err, results) { 
      res.render("api-results", [results]); 
     }); 
    }); 

これは私がやっていることのちょうどです。私がconsole.logに要求後の各変数の結果が正常に動作しても、何も返されず、自分のejsテンプレートが提供されていません。

私も様々なフォーマット(配列/オブジェクト形式)で、以下のようなものを使用して試してみましたが、私はそれが働くように見えることはできません

res.render("api-results", { unsPAM: unsPAM, unsAll: unsAll }); 

私はその考えて要求の結果ではないので何とか非同期配列に変換します。任意のアドバイス/ベストプラクティスのソリューション/アイデアの変更は非常に高く評価されます。

ありがとうございます。

答えて

2

RTFMの別のケース。

router.get('/', function(req, res) { 
    async.parallel([ 
     function(next) { 
      request(queryString + 'end point string', function(error, response, body) { 
       if (!error && response.statusCode == 200) { 
        var unsPAM = JSON.parse(body); 

        return next(null, unsPAM); 
       }; 
       console.log(error); 

       next(error); 
      }); 
     }, 
     function(next) { 
      request(queryString + 'end point string', function(error, response, body) { 
       if (!error && response.statusCode == 200) { 
        var unsAll = JSON.parse(body); 

        return next(null, unsAll); 
       }; 
       console.log(error); 

       next(error); 
      }); 
     }], 
     function(err, results) { 
      res.render("api-results", [results]); 
     }); 
    }); 

あなた[unsPAM, unsAll]を含む配列を取得します:機能のそれぞれで、あなたはerrorオブジェクト(またはnull)とあなたが上渡したい値でnext()を起動する必要があります。代わりにオブジェクトを使用する場合は、次のようにしてください:

res.render("api-results", { unsPAM: results[0], unsAll: results[1]}); 
+0

ありがとうございます!これは素晴らしかったです。あなたはRTFMの意味を正確に聞いてもらえますか?クイックグーグル検索では、あなたが使った文脈では私の質問に本当に答えなかった。非常に高く評価。受け入れられた答え。 – Lukon

+0

[RTFM](https://en.wikipedia.org/wiki/RTFM)。それは冗談で意味されていた。 –

+1

ああ。本当に十分です。私はあなたの助けに関係なく、私はドキュメントでこれを逃したお詫び申し上げます。再度、感謝します。 – Lukon

関連する問題