Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Node.js führt eine synchrone Schleife oder Iteration über asynchrone Anweisungen durch

Mit Rekursion ist der Code ziemlich sauber. Warten Sie, bis die HTTP-Antwort zurückkommt, und starten Sie dann den nächsten Versuch. Dies funktioniert in allen Versionen von 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);

Eine Lösung mit Versprechungen würde auch gut funktionieren und ist knapper. Wenn Sie beispielsweise eine Version von get haben, die ein Versprechen zurückgibt und Node v7.6+, könnten Sie eine async/await-Funktion wie dieses Beispiel schreiben, die einige neue JS-Features verwendet.

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

Hinweis:In beiden Beispielen wird die Fehlerbehandlung übersprungen, aber Sie sollten dies wahrscheinlich in einer Produktions-App haben.