sql >> Database teknologi >  >> RDS >> Mysql

Node.js looper synkront eller itererer over asynkrone sætninger

Med rekursion er koden ret ren. Vent på, at http-svaret kommer tilbage, og affyr derefter næste forsøg. Dette vil fungere i alle versioner af 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);

En løsning med løfter ville også fungere godt og er mere kortfattet. For eksempel, hvis du har en version af get, der returnerer et løfte og Node v7.6+, kan du skrive en async/wait-funktion som dette eksempel, der bruger nogle nye JS-funktioner.

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

Bemærk:begge disse eksempler springer over fejlhåndtering, men det skal du nok have i en produktionsapp.



  1. PostgreSQL Upsert differentiere indsatte og opdaterede rækker ved hjælp af systemkolonner XMIN, XMAX og andre

  2. PG::UndefineretTabel:FEJL:Relationen eksisterer ikke med en korrekt Rails-navngivning og -konvention

  3. MaxScale Basic Management ved hjælp af MaxCtrl til MariaDB Cluster

  4. REGEXP Med PDO Mysql