2012-09-25 2 views
4

Je combine les modules async et request pour effectuer des requêtes API de façon asynchrone et avec limitation de débit.Limitation des demandes avec les modules asynchrones et de requête

Voici mon code

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. 
}); 

données contient toutes les urls que je fais demande. Je limite le nombre de requêtes simultanées à 5 en utilisant la méthode forEachLimit. Ce code fait la première requête puis s'arrête. Dans les documents asynchrones, il est écrit "L'itérateur reçoit un rappel qui doit être appelé une fois qu'il est terminé". Mais je ne comprends pas, que dois-je faire pour signaler que la demande est terminée?

+0

Merci, je luttais avec le même problème pendant des heures :) –

Répondre

5

D'abord, vous ajouteras rappel à votre fonction iterator:

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

next(); ou next(null); dit Async que le traitement est effectué. indique une erreur (si error pas null).

Après avoir traité toutes les demandes Async appelle sa fonction de rappel avec 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 appelle son rappel immédiatement après avoir reçu la première erreur ou après toutes demandes traitées avec succès.

+0

Excellent. C'est ce dont j'avais besoin. Merci. – saeed

Questions connexes