Výjimky v asynchronních callback funkcích v JavaScriptu

Předpokládejme, že pokud je parametrem make předáno číslo neexistujícího prvku pole - jde o výjimečnou situaci. Jak již víte, výjimky vzniklé uvnitř asynchronní funkce nemohou být zachyceny pomocí try-catch. V našem případě výjimka, která vznikne uvnitř make nebo callback funkce, nebude zachycena:

javascripttry {
  make(10, function(res) {
    console.log(res);
  });
} catch(err) {
  // nezachytí se
}

V callback přístupu se s výjimkami pracuje následujícím způsobem: do prvního parametru callback funkce se posílá výsledek, a do druhého - chyba. V tomto případě se zpracování chyb děje následovně:

javascriptmake(10, function(res, err) {
  if (!err) {
    console.log(res); // nenastala chyba, vypíšeme výsledek
  } else {
    console.log(err); // nastala chyba, vypíšeme její text
  }
});

Přepišme kód naší funkce make v souladu s popsaným přístupem:

javascriptfunction make(num, callback) {
  setTimeout(function() {
    let arr = [1, 2, 3, 4, 5];
    
    let err;
    if (arr[num] === undefined) {
      err = 'elem not exists'; // text chyby
    } else {
      err = null; // žádná chyba
    }
    
    callback(arr[num], err);
  }, 3000);
}