sql >> Database >  >> RDS >> Mysql

Node.js loopt synchroon of herhaalt asynchrone instructies

Met recursie is de code behoorlijk schoon. Wacht tot het http-antwoord terugkomt en start de volgende poging. Dit werkt in alle versies van 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);

Een oplossing met beloften zou ook goed werken en is beknopter. Als u bijvoorbeeld een versie van get heeft die een belofte teruggeeft en Node v7.6+, zou je een async/wait-functie kunnen schrijven zoals dit voorbeeld, die enkele nieuwe JS-functies gebruikt.

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

Opmerking:in beide voorbeelden wordt foutafhandeling overgeslagen, maar dat zou u waarschijnlijk in een productie-app moeten hebben.



  1. Een gids voor het begrijpen van schaalpatronen voor databases

  2. BULK INSERT-probleem in MySQL

  3. Hoe u alle schendingen van beperkingen in een SQL Server-database kunt vinden

  4. Hoe kom ik van een MySql-server naar een Android-app?