Kivételek aszinkron callback-ekben JavaScriptben

Tegyük fel, hogy ha a make paramétereként egy nem létező tömbelem sorszámát adjuk át - az kivételes helyzet. Ahogyan már tudjátok, az aszinkron függvényen belül keletkező kivételek nem foghatók meg a try-catch blokkal. Esetünkben a make függvényen vagy a callback-en belül keletkező kivétel nem lesz elkapva:

javascripttry {
  make(10, function(res) {
    console.log(res);
  });
} catch(err) {
  // nem kapódik el
}

A callback megközelítésben a kivételekkel a következőképpen dolgoznak: a callback első paraméterébe az eredményt, a másodikba pedig a hibát küldik. Ebben az esetben a hibakezelés a következőképpen történik:

javascriptmake(10, function(res, err) {
  if (!err) {
    console.log(res); // nem történt hiba, kiírjuk az eredményt
  } else {
    console.log(err); // hiba történt, kiírjuk a szövegét
  }
});

Alakítsuk át a make függvényünk kódját a leírtaknak megfelelően:

javascriptfunction make(num, callback) {
  setTimeout(function() {
    let arr = [1, 2, 3, 4, 5];
    
    let err;
    if (arr[num] === undefined) {
      err = 'elem not exists'; // a hiba szövege
    } else {
      err = null; // nincs hiba
    }
    
    callback(arr[num], err);
  }, 3000);
}