sql >> Databáze >  >> RDS >> Mysql

Node.js synchronně zacyklí nebo iteruje přes asynchronní příkazy

S rekurzí je kód docela čistý. Počkejte, až se odpověď http vrátí, a poté spusťte další pokus. Toto bude fungovat ve všech verzích uzlu.

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

Řešení využívající sliby by také fungovalo dobře a je stručnější. Pokud například máte verzi get, která vrací slib a Node v7.6+, můžete napsat funkci async/await, jako je tento příklad, která využívá některé nové funkce 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);

Poznámka:oba tyto příklady přeskakují zpracování chyb, ale pravděpodobně byste to měli mít v produkční aplikaci.



  1. pg_dump postgres databáze ze vzdáleného serveru, když je blokován port 5432

  2. Je možné vytvořit rekurzivní SQL dotaz?

  3. Jak vyřešit ORA-29280:neplatná cesta k adresáři

  4. Je možné urychlit sum() v MySQL?