Mysql
 sql >> Base de données >  >> RDS >> Mysql

Node.js boucle ou itère de manière synchrone sur des instructions asynchrones

Avec la récursivité, le code est assez propre. Attendez que la réponse http revienne, puis lancez la prochaine tentative. Cela fonctionnera dans toutes les versions de node.

var urls = ['http://stackoverflow.com/', 'http://security.stackexchange.com/', 'http://unix.stackexchange.com/'];

var processItems = function(x){
  if( x < urls.length ) {
    http.get(urls[x], function(res) {

      // add some code here to process the response

      processItems(x+1);
    });
  }
};

processItems(0);

Une solution utilisant des promesses fonctionnerait également bien, et est plus concise. Par exemple, si vous avez une version de get qui renvoie une promesse et Node v7.6+, vous pouvez écrire une fonction async/wait comme cet exemple, qui utilise de nouvelles fonctionnalités JS.

const urls = ['http://stackoverflow.com/', 'http://security.stackexchange.com/', 'http://unix.stackexchange.com/'];

async function processItems(urls){
  for(const url of urls) {
    const response = await promisifiedHttpGet(url);    
    // add some code here to process the response.
  }
};

processItems(urls);

Remarque :ces deux exemples ignorent la gestion des erreurs, mais vous devriez probablement l'avoir dans une application de production.