Promise.try הוא עכשיו Baseline החדש

Jeremy Wagner
Jeremy Wagner

תאריך פרסום: 17 בינואר 2025

ביצוע משימות אסינכרוניות באינטרנט יכול להיות מאתגר, וחלק גדול מהמשימות שמבוצעות באינטרנט כוללות אסינכרוניות. בין אם מדובר בקריאות ל-fetch או בפעולות אסינכרוניות אחרות, הדפדפנים עוזרים לכם לבצע את העבודה הזו בקלות רבה יותר כששיטות מובנות מספקות טיפול יעיל בשגיאות. האפשרות הזו כבר קיימת ל-Promises באמצעות השיטות then,‏ catch ו-finally.

עם זאת, הדרך שבה תתכננו את קוד האפליקציה צריכה להיות גמישה, ולא כל מה שתעשו באפליקציה חייב להיות אסינכרוני. לפעמים תרצו לטפל בתוצאה של קריאה חוזרת (callback) בצורה שתהיה פשוטה יותר אם לא תהיה חשיבות לכך שהקריאה החוזרת שהעברתם ל-Promise היא אסינכרונית או לא. Promise.try היא שיטה שזמינה עכשיו בכל מנועי הדפדפנים העיקריים, ומפשטת את התהליך למפתחים. כלומר, היא נמצאת עכשיו בסטטוס 'זמינה עכשיו'.

מהו Promise.try ואיך הוא פועל?

Promise.try היא שיטה נוחה שמאפשרת לטפל בשגיאות בפונקציות קריאה חוזרת אסינכרניות בקלות רבה יותר מאשר אם משתמשים ב-Promise.resolve:

// If the callback is synchronous and it throws
// an exception, the error won't be caught here:
new Promise(resolve => resolve(callback());

// But it will be here:
Promise.try(callback);

לאחר מכן, משתמשים ב-methods‏ then,‏ catch ו-finally כדי לטפל בפתרון או בדחייה של Promise:

Promise.try(callback)
  .then(result => console.log(result))
  .catch(error => console.log(error))
  .finally(() => console.log("All settled."));

מה קורה אם לפונקציית הקריאה החוזרת יש ארגומנטים? יש שתי דרכים לטפל בבעיה הזו:

// This creates an extra closure, but works:
Promise.try(() => callback(param1, param2));

// This doesn't create an extra closure, and still works:
Promise.try(callback, param1, param2);

היתרון העיקרי של השימוש ב-Promise.try הוא שהוא מאפשר להשתמש ב-Promises באופן אחיד, גם אם פונקציית ה-callback שאתם מעבירים אליו היא סינכרונית וגם אם היא אסינכררונית. כלומר, במקרה של פונקציית שירות שמעבירה קריאות חזרה (callbacks) ל-Promise שנעשה בה שימוש נרחב בקוד, השימוש ב-Promise.try מבטיח טיפול תקין בשגיאות בכל קריאה חוזרת שתעבירו אליה. למידע נוסף ולתרחישים שימוש או בעיות פוטנציאליות אחרים, אפשר לעיין במסמכי התיעוד של MDN בנושא Promise.try.

סיכום

עכשיו, אחרי ש-Promise.try הגיע לשלב 'זמין', אמורה להיות לך אפשרות להשתמש בו בכל מנועי הדפדפנים העיקריים. ככל שיחלוף הזמן, תוכלו להשתמש ב-Promise.try באפליקציות האינטרנט שלכם בידיעה גוברת שהוא יהיה חלק יציב וניתן לפעולה הדדית בפלטפורמת האינטרנט.