خطأ أثناء المعالجة

توضّح هذه الصفحة كيفية التعامل مع الأخطاء عند استخدام 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.

يعرض المقتطف التالي بنية رسالة خطأ في "خرائط Google":

  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);
        }
    }
    // ...
}