טיפול בשגיאות

בדף הזה מוסבר איך לטפל בשגיאות כשמשתמשים ב-Maps JavaScript API ובמחלקה Place.

ב-Google Maps JavaScript API נעשה שימוש במחלקות הבאות לשגיאות:

  • MapsNetworkError מייצג שגיאת רשת משירות אינטרנט (יכול לכלול שגיאות RPCStatus).
  • MapsRequestError מייצג שגיאת בקשה משירות אינטרנט (כלומר, המקבילה לקוד 4xx ב-HTTP).
  • MapsServerError מייצג שגיאה בצד השרת משירות אינטרנט (כלומר, המקבילה לקוד 5xx ב-HTTP).

המחלקות MapsNetworkError,‏ MapsRequestError ו-MapsServerError שייכות לספריית הליבה של Maps. מידע נוסף על ספריות

כל אחת מהמחלקות האלה מכילה את המאפיינים הבאים:

המאפיין code מזהה את סוג השגיאה, והמאפיין endpoint מזהה את נקודת הקצה שהחזירה את השגיאה (לדוגמה, PLACES_DETAILS). מכיוון ש-MapsNetworkError הוא מחלקת משנה של Error, זמינים גם מאפיינים אחרים, כולל name ו-message.

בקטע הקוד הבא מוצג המבנה של הודעת שגיאה ב-Maps:

  MapsRequestError: PLACES_GET_PLACE: INVALID_ARGUMENT: Error fetching fields: The provided Place ID: ChIJN5Nz71W3j4ARhx5bwpTQEGg**** is not valid.
  [error.name     ] [error.endpoint ] [error.code     ]
                    [error.message --->                ... ]
  

השגיאה הגולמית כוללת את כל מה שנמצא במחרוזת השגיאה. error.message כולל את כל מחרוזת השגיאה, לא כולל error.name.

בקטע הקוד הבא מוצגת דוגמה לטיפול בשגיאות כשמשתמשים במחלקה Place. בדוגמה הזו נעשה שימוש בבלוק try/catch כדי לטפל בכל אחד משלושת סוגי השגיאות. אפשר להשתמש בקוד דומה כדי לטפל בשגיאות בכל מחלק�� של Maps JavaScript API.

async function getPlaceDetails() {
    const { Place } = await google.maps.importLibrary("places") as google.maps.PlacesLibrary;
    const { MapsNetworkError, MapsRequestError, MapsServerError } = await google.maps.importLibrary("core") as google.maps.CoreLibrary;

    // Use place ID to create a new Place instance.
    const place = new Place({
        id: 'ChIJN5Nz71W3j4ARhx5bwpTQEGg****', // Pass a bad Place ID to trigger an error.
    });

    // Error handling for fetchFields.
    try {
        // Call fetchFields, passing the desired data fields.
        await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location'] });
    } catch (error: any) {
        if (error && error instanceof google.maps.MapsRequestError) {
            // HTTP 4xx request error.
            console.error('fetchFields failed: MapsRequestError - check the request parameters', error);
        } else if (error && error instanceof google.maps.MapsServerError) {
            // HTTP 5xx server-side error.
            console.error('fetchFields failed: MapsServerError', error);
        } else if (error && error instanceof google.maps.MapsNetworkError) {
            // Network error.
            console.error('fetchFields failed: MapsNetworkError', error);
        }  else {
            console.error('fetchFields failed: An unknown error occurred', error);
        }
    }
    // ...
}