sql >> Base de Datos >  >> RDS >> Mysql

Node.js realiza un bucle sincrónico o itera sobre declaraciones asincrónicas

Con la recursión, el código es bastante limpio. Espere a que regrese la respuesta http y luego dispare el próximo intento. Esto funcionará en todas las versiones del nodo.

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

Una solución que use promesas también funcionaría bien y es más concisa. Por ejemplo, si tiene una versión de get que devuelve una promesa y Node v7.6+, podría escribir una función async/await como este ejemplo, que utiliza algunas características nuevas de 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);

Nota:ambos ejemplos omiten el manejo de errores, pero probablemente debería tener eso en una aplicación de producción.