כאַפּן ערראָרס אין Promise.all

א זיכער אָלטערנאַטיוו צו Javascript ס Promise.all

אַווייטינג אַלע הבטחות אַרייַנגערעכנט ערראָרס

אויב איר זענט אַ דזשאַוואַסקריפּט-דעוועלאָפּער, איר רובֿ מסתּמא געוויינט די סטאַנדאַרט געבויט-אין פּראָמיסע פּראָמיסע און זייַן API Promise.all, וואָס אַווייץ ביז אַלע הבטחות צוגעשטעלט אין אַ מענגע האָבן ריזאַלווד. דאָס איז אַ זייער עלעגאַנט וועג צו דערוואַרטן פאַרשידן ייסינגקראַנאַס רעזולטאַטן איידער איר פאָרזעצן מיט דיין געשעפט לאָגיק.

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

Promise.allSettled אַווייץ אַלע אַסינק רעזולטאַטן

צומ גליק עס איז אַ צווייטע אַפּי גערופֿן Promise.allSettled בנימצא וואָס געראַנטיז צו דערוואַרטן אַלע הבטחות, קיין ענין אויב דער רעזולטאַט איז גילטיק אָדער אַ טעות. די פאלגענדע קאָד דעמאַנסטרייץ זייַן נוצן, וואָס איז טאַקע פּשוט, אָבער קענען ראַטעווען איר אַ פּלאַץ פון קאָפּווייטיק.

דער הויפּט חילוק צו Promise.all איז אַז יעדער צוזאָג איז ריזאַלווד צו אַ טופּלע פון אינפֿאָרמאַציע, ווו ביידע די שטאַט (מקיים אָדער פארווארפן) און די ווערט (אין פאַל פון מקיים) אָדער די סיבה (אין פאַל פון פארווארפן) זענען בנימצא .

צושטעלן אַ ליידיק מענגע

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

/**
 * A simple dummy function that
 * fetches data from multiple
 * endpoints related to a user.
 */
async function fetchUserData(id){
  // A simple array of promises.
  // The first two parameters are
  // mock calls from down below.
  const promises = [
    fetchUserHistory(id),
    fetchUserProfile(id),
    // For testing only, let's throw.
    Promise.reject(new Error('an error'))
];
  
  const values = await Promise.allSettled(promises);
  // values === [
  //    { status: "fulfilled", value: [1, 2, 3] },
  //    { status: "fulfilled", value: {name:"dummy"} },
  //    { status: "rejected", reason: {}
  // ]
}

// The following functions are just mocks
// and should help improve readability
// of the example at the top.

async function fetchUserHistory(id){
  return Promise.resolve([1,2,3]);
}

async function fetchUserProfile(id){
  return Promise.resolve({ name: "dummy" });
}

ווי איר קענען זען, Promise.allSettled איז אַ זייער אָנגענעם דערצו צו Promise.all און אַלאַוז איר צו דערוואַרטן אַלע רעזולטאַטן, פרייַ פון זייער רעזולטאַטן. איך טאָן ניט טראַכטן אַז די אַפּי וועט פּאַסיק אין יעדער נוצן פאַל, אָבער עס זיכער סאַוועס דיין פון ראַפּינג אַסינק קאַללס אין אַן אָוווערכעד פּרובירן-כאַפּן-בלאָק.

פֿאָרשלאָגן

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

נאָך-וואָרט

שפּראַכן