Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Node.js synchronicznie zapętla się lub iteruje po asynchronicznych instrukcjach

Przy rekursji kod jest całkiem czysty. Poczekaj na odpowiedź http, a następnie uruchom następną próbę. Będzie to działać we wszystkich wersjach węzła.

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

Rozwiązanie wykorzystujące obietnice również działałoby dobrze i jest bardziej zwięzłe. Na przykład, jeśli masz wersję get, która zwraca obietnicę i Node v7.6+, możesz napisać funkcję async/await, taką jak w tym przykładzie, która używa nowych funkcji 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);

Uwaga:oba te przykłady pomijają obsługę błędów, ale prawdopodobnie powinieneś mieć to w aplikacji produkcyjnej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO:serwer MySQL zniknął

  2. uzależnione od zduplikowanej aktualizacji klucza

  3. USUŃ wszystkie zduplikowane tematy z kilkoma warunkami

  4. MySql:Wybierz elementy, które mają wszystkie wartości

  5. MySQL:Zwróć tylko ostatnią wiadomość w tabeli wiadomości płaskich/konwersacji