Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Node.js faz um loop síncrono ou itera em instruções assíncronas


Com recursão, o código é bem limpo. Aguarde a resposta do http voltar e dispare na próxima tentativa. Isso funcionará em todas as versões do 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);

Uma solução usando promessas também funcionaria bem e é mais concisa. Por exemplo, se você tiver uma versão de get que retorne uma promessa e Node v7.6+, você pode escrever uma função async/await como este exemplo, que usa alguns novos recursos 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);

Observação:ambos os exemplos ignoram o tratamento de erros, mas você provavelmente deve ter isso em um aplicativo de produção.