sql >> Databasteknik >  >> RDS >> Mysql

Node.js loopar eller itererar synkront över asynkrona satser

Med rekursion är koden ganska ren. Vänta tills http-svaret kommer tillbaka och avfyra sedan nästa försök. Detta kommer att fungera i alla versioner av 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öften skulle också fungera bra och är mer kortfattad. Om du till exempel har en version av get som ger ett löfte och Node v7.6+, kan du skriva en async/await-funktion som det här exemplet, som använder några nya 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);

Obs:båda dessa exempel hoppar över felhantering, men du borde förmodligen ha det i en produktionsapp.



  1. HQL är null och !=null på en Oracle-kolumn

  2. Är det bättre att köra många sql-kommandon med en anslutning, eller återansluta varje gång?

  3. Hur kan jag beskriva alla tabeller i databasen genom en sats?

  4. SQL WHERE kolumn =allt