אַוואַנסירטע פּרוּווט / כאַפּן / לעסאָף אין דזשאַוואַסקריפּט און טייפּסקריפּט

נעמען אַ דיטיילד קוק אין די ימפּלאַמענטיישאַן פון אַ פּרובירן-כאַפּן-לעסאָף-בלאָק

טעות האַנדלינג אין דזשאַוואַסקריפּט & טייפּסקריפּט

ווען אַ טעות כאַפּאַנז אין רונטימע, עס איז "ארלנגעווארפן" אין דזשאַוואַסקריפּט און טייפּסקריפּט, ווי עס איז דער פאַל אין רובֿ פּראָגראַממינג שפּראַכן. ונהאַנדלעד ארלנגעווארפן ערראָרס וועט פירן צו אַ קראַך פון דיין אַפּ אָדער דינען, אַזוי צו די ערגסט מעגלעך דערפאַרונג. אויב אַ טעות כאַפּאַנז, קיין ונסאַוועד פּראָגרעס איז פאַרפאַלן און וסערס קען פּאַטענטשאַלי אָנהייבן אַ לאַנג פּראָצעס (פֿאַר בייַשפּיל, אויב אַ באַניצער איז ענראָולד צו אַ פּלאַטפאָרמע דורך צושטעלן פילע אינפֿאָרמאַציע). דער רעזולטאַט איז אַז די וסערס וועלן מיסטאָמע קיינמאָל נוצן דיין פּראָדוקט ווידער ווייַל צוטרוי איז פאַרפאַלן.

צו האַנדלען מיט אַזאַ קאַסעס, אַ טעות קען זיין "קאַטשאַז". צו כאַפּן ערראָרס אין דזשאַוואַסקריפּט און טייפּסקריפּט, איר נאָר ייַנוויקלען דיין קאָד אין אַ "פּרובירן" -בלאָקק, נאכגעגאנגען דורך אַ "כאַפּן" -בלאָקק.

async function getData(){
  try {
    // Call a dummy async 'fetch'-functoin
    const result = await fetch();
    return { result };
  } catch(error) {
    return { error };
  }
}

// ... later in your code ....

const { result, error } = await getData();

if (error){
  // ... handle error case.
}

// Access the results.

דער רעזולטאַט איז אַז דער טעות וועט נישט פּראַפּאַגייט דורך די גאנצע סיסטעם, וואָס פירט צו די קראַך, אָבער וועט זיין כאַנדאַלד גלייַך אין די פאַרנעם פון דיין קאָד. די אַפּ אָדער דינען וועט נישט קראַך און אַ מיטיגיישאַן סטראַטעגיע צו פּראָצעס די טעות קענען זיין געווענדט.

ספּעציעלע האַנדלינג מיט די "לעסאָף" -בלאָקק

ווי אַן עקסטרע שריט צו האַנדלען מיט ערראָרס, דזשאַוואַסקריפּט און טייפּסקריפּט צושטעלן אַן נאָך "לעסאָף" -קאָרד. אַזאַ אַ "לעסאָף" -בלאָקק עקסאַקיוץ קיין קאָד אין זיין פאַרנעם נאָך ביידע די "פּרובירן" -בלאָקק ווי געזונט ווי די "כאַפּן" -בלאָקק האָבן עקסאַקיוטאַד (אויב אַ טעות איז געטראפן).

// This function is absolutely save
// to call. It fetches some data and 
// optionally catches a potential error.
//
// After everything's done, a 'finally'
// sends the error to our backend for logs,
// if there was any.
async function getData(){
  // In this case, we store the result
  // and error in mutable variables,
  // then return both.
  let result: Result;
  let error: Error;
  
  try {
    // Call a dummy async 'fetch'-function
    result = await fetch();
  } catch(e) {
    error = e;
  } finally {
    // After the whole try/catch has been
    // processed, we can log the error.
    if(error){
      await trackErrorInCloud(error);
    }
  }
  
  return { result, error };
}

// ... same as before ...

אָבער וואַרטן, עס ס מער! צי האָט איר וויסן די "לעסאָף" -בלאָקק עקסאַקיוטאַד אפילו אויב איר ווייַזן אַ רעזולטאַט אין די "פּרובירן" - אָדער "כאַפּן" -בלאָקק? דאָ ס אַ בייַשפּיל פון וואָס איך מיינען דורך וואָס.

// Same as the example before, but
// now we directly return from within
// each code block. And this is where
// a side effect can happen.
async function getData(){
  try {
    const result = await fetch();
    return { result };
  } catch(error) {
    return { error }
  } finally {
    //
    // WATCH OUT!
    //
    // Just for demo purpose, but this
    // line of code will override both
    // the return in 'try' as well as 'catch'!
    //
    // Returning inside of 'finally' is therefore
    // dangerous and will lead to hard-to-debug 
    // issues.
    return { finally: true };
  }
}

// data === { finally: true }
const data = await getData();
// Here's a better use case for
// finally.
async function getData(){
  let error: Error;
  
  try {
    const result = await fetch();
    return { result };
  } catch(e) {
    error = e;
    return { error }
  } finally {
    // No return in finally,
    // so it's safe to use.
    if(error){
      await logInCloud()
    }
  }
}

// if no error === { result: ... }
// if error === { error: ... }
const data = await getData();

קיצער

ווי איר האָט געזען, האַנדלינג ערראָרס אין דזשאַוואַסקריפּט און טייפּסקריפּט איז גאַנץ גרינג און ויסמיידן אַ גאַנץ קראַך פון דיין אַפּלאַקיישאַן. די ספּעציעלע האַנדלינג פון אומגעקערט רעזולטאַטן אין די "פּרובירן" - און "כאַפּן" -בלאַקס איז גוט צו וויסן ווען ניצן די "לעסאָף" -בלאָקק, אָבער זאָל ניט זיין אַביוזד צו ויסמיידן ימפּלאַמענינג דיין קאָד אין אַן אַנטי-מוסטער סטיל.

פֿאָרשלאָגן

פֿאַרבונדענע

שפּראַכן