Sobes.tech
Junior

Do czego służy Promise.all?

sobes.tech AI

Odpowiedź od AI

Promise.all akceptuje obiekt iterowalny promes (np. tablicę) i zwraca nową promesę. Ta nowa promesa zostanie rozwiązana, gdy wszystkie przekazane promesy zostaną pomyślnie rozwiązane. Wynikiem będzie tablica wartości, odpowiadających wynikom każdej z przekazanych promes, w tej samej kolejności.

Jeśli przynajmniej jedna z przekazanych promes zostanie odrzucona, to Promise.all zostanie natychmiast odrzucona z powodu odrzucenia pierwszej odrzuconej promesy.

Zastosowania:

  • Równoczesne wykonywanie wielu operacji asynchronicznych, które nie zależą od siebie.
  • Oczekiwanie na zakończenie zestawu operacji przed przejściem do następnego kroku.

Przykład:

async function fetchData() {
  const urls = [
    'https://api.example.com/data1',
    'https://api.example.com/data2',
    'https://api.example.com/data3',
  ];

  try {
    // Ładowanie danych z wielu URL jednocześnie
    const responses = await Promise.all(urls.map(url => fetch(url)));

    // Sprawdzanie powodzenia każdej odpowiedzi
    for (const response of responses) {
      if (!response.ok) {
        // Jeśli jedna z odpowiedzi nie powiedzie się, rzucamy błąd
        throw new Error(`Błąd HTTP! status: ${response.status}`);
      }
    }

    // Parsowanie wszystkich odpowiedzi do JSON
    const jsonData = await Promise.all(responses.map(response => response.json()));

    // Teraz jsonData to tablica wyników wszystkich zapytań
    console.log(jsonData);

  } catch (error) {
    // Obsługa błędu, jeśli jedna z promes zostanie odrzucona (Fetch lub JSON.parse)
    console.error('Błąd podczas pobierania danych:', error);
  }
}

fetchData();