4

asyncモジュールとrequestモジュールを組み合わせて、API リクエストを非同期でレート制限して作成しています。

これが私のコードです

var requestApi = function(data){

    request(data.url, function (error, response, body) {

        console.log(body);

    });
};


async.forEachLimit(data, 5, requestApi, function(err){
      // do some error handling.
});

データには、私がリクエストしたすべての URL が含まれています。forEachLimitメソッドを使用して同時リクエスト数を 5 に制限しています。このコードは最初の 5 つのリクエストを行い、その後停止します。

非同期ドキュメントでは、「イテレータには、完了したら呼び出す必要があるコールバックが渡されます」と書かれています。しかし、私はこれを理解していません.リクエストが完了したことを知らせるにはどうすればよいですか?

4

1 に答える 1

5

まず、反復子関数にコールバックを追加します。

var requestApi = function(data, next){
    request(data.url, function (error, response, body) {
        console.log(body);
        next(error);
    });
};

next();またはnext(null);、すべての処理が完了したことを Async に伝えます。next(error);エラーを示します (そうerrorでない場合null)。

すべてのリクエストを処理した後、Async はそのコールバック関数をerr == null次のように呼び出します。

async.forEachLimit(data, 5, requestApi, function(err){
    // err contains the first error or null
    if (err) throw err;
    console.log('All requests processed!');
});

Async は、最初のエラーを受け取った直後、またはすべてのリクエストが正常に完了した後にコールバックを呼び出します。

于 2012-09-25T19:10:29.167 に答える