5

サーバー ノードで非同期 http 呼び出しを開始したいと思います。asyncノード モジュールを見たので、それがasync.parallel可能になると思います。

文書化された例は非常に明確ですが、複数の http 呼び出しを管理する方法がわかりません。

以下の例を試してみましたが、http 呼び出しさえ起動しません。

var http = require('http');

var Calls = [];
Calls.push(function(callback) {
    // First call
    http.get('http://127.0.0.1:3002/first' callback);
});

Calls.push(function(callback) {
    // Second call
     http.get('http://127.0.0.1:3002/second' callback);
});

var async = require('async');
async.parallel(Calls, function(err, results) {
    console.log('async callback: '+JSON.stringify(results));
    res.render('view', results);
});

http リクエストを個別に起動すると、結果は得られますが、非同期コールバックを呼び出すと、async callback: [null,null]

4

3 に答える 3

5

ドキュメントを見てください:

http.request() では、リクエストの本文にデータが書き込まれていない場合でも、リクエストの処理が完了したことを示すために、常に req.end() を呼び出す必要があります。

リクエストを作成していますが、それを確定していません。通話では、次のことを行う必要があります。

var req = http.request(options, function(page) {
    // some code
});
req.end();

これは、ボディなしで通常の GET リクエストを行っていることを前提としています。

便利なショートカットであるhttp.getの使用も検討する必要があります。

http.get("http://127.0.0.1:3002/first", function(res) {
    // do something with result
});

更新その他のことは、非同期のコールバックはフォームでなければならないということです

function(err, res) { ... }

http.get へのコールバックは 1 つの引数しか受け入れないため、現在行っている方法は機能しませんres。あなたがする必要があるのは次のとおりです。

http.get('http://127.0.0.1:3002/second', function(res) {
    callback(null, res);
});
于 2013-06-14T10:54:37.640 に答える
0

callback(null, res);代わりにこの方法でコールバックを呼び出すことですcallback(res);。最初のパラメーターはエラーとして解釈され、2 番目のパラメーターは実際の結果であると思います。

于 2013-06-14T12:40:39.053 に答える