2016-04-11 22 views
0

これで完全に困惑し、誰かがノードJS非同期とリクエストモジュールの組み合わせを手助けできるように願っています。私はAsyncに渡すダウンロードするファイルのリストを作成しようとしています。オブジェクトの配列には、上記のファイルをダウンロードして保存するのに必要なすべての情報が含まれています。何回ものデバッグの後、私はリクエストがそこを出ることさえしていないことを発見しました。私は理由を理解できません。ノード非同期とリクエスト、非同期で待機せずにリクエストが送信されない

async.each(missingFiles, 
    function (obj, cb) { 

     console.log(obj.url); 

     //var file = nfs.createWriteStream(obj.fullPath); 
     request(obj.url, function (error, response, body) { 
      if (!error && response.statusCode == 200) { 
      console.log(response) 
      } 

     cb(); 
     }) 
    }, 
    function (err) { 

     if (err) { 
      console.log("Async failed"); 
     } 
    } 
); 
+0

あなたのコンソールには何がありますか?リクエストが送信されないのはなぜですか?詳細な情報がなければ、この質問は話題にはなりません。 –

+0

obj.url(要求したいアイテムが画面に表示されます)が、その後は次のobj.urlに移動しました。 if文を削除するようにコードを変更しただけで、すべての応答を出力すると、同じ効果が得られます。 – JeffH

+0

このブロックはhttpリクエストハンドラの中にありますか?はいの場合は、非同期タスクが完了した後に応答が返されていることを確認してください。 –

答えて

0

私は前に同様の問題を抱えていました。非同期ブロックの外で応答を送信すると、非同期タスクが完了する前にhttp要求/応答サイクルが終了します。修正は、done()コールバックで応答を送信することです。

app.post("/download", function(req, res) { 
    async.eachSeries(missingFiles, function (obj, cb) { 
    ... 
    //do your work here 
    cb() 
    }, function done() { 
    res.json({success: true}); 
    }); 
} 
+0

私は上記の構造を試しましたが、シリーズURLの最初のものだけが印刷され、まだデータは返されません。 – JeffH

関連する問題