JavaScript-de asinhron çagyrmalar üçin çakylyşlar

Görkeziji make üçin massiwiň ýok elemintiniň nomeri geçirilse - bu çakylyş ýagdaýdyr. Size bellisi ýaly, asinhron funksiýanyň içinde döreýän çakylyşlar, try-catch arkaly tutup bolmaýar. Bizim ýagdaýymyzda, make ýa-da çagyrmanyň içinde döreýän çakylyş tutulmaz:

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

Çagyrmanyň ýoluna görä, çakylyşlar bilen işlemek aşakdaky ýaly amala aşyrylýar: çagyrmanyň birinji görkezijisine netije, ikinjisine - ýalňyşlyk ugradylýar. Bu ýagdaýda ýalňyşlyklaryň işlenişi aşakdaky ýaly bolýar:

javascriptmake(10, function(res, err) {
  if (!err) {
    console.log(res); // ýalňyşlyk ýüze çykamady, netijäni çap et
  } else {
    console.log(err); // ýalňyşlyk ýüze çykdy, onuň tekstini çap et
  }
});

Indi, aýdylanda ýaly, bizim make funksiýamyzyň kodyny görkezilen üýtgedeliň:

javascriptfunction make(num, callback) {
  setTimeout(function() {
    let arr = [1, 2, 3, 4, 5];
    
    let err;
    if (arr[num] === undefined) {
      err = 'elem not exists'; // ýalňyşlygyň teksti
    } else {
      err = null; // ýalňyşlyk ýok
    }
    
    callback(arr[num], err);
  }, 3000);
}