رسیدگی به خطا

در این صفحه نحوه رسیدگی به خطاها هنگام استفاده از Maps JavaScript API و کلاس Place توضیح داده شده است.

Google Maps JavaScript API از کلاس های زیر برای خطاها استفاده می کند:

  • MapsNetworkError یک خطای شبکه از یک سرویس وب را نشان می دهد (می تواند شامل خطاهای RPCSstatus باشد).
  • MapsRequestError نشان دهنده یک خطای درخواست از یک وب سرویس است (یعنی معادل کد 4xx در HTTP).
  • MapsServerError یک خطای سمت سرور از یک سرویس وب را نشان می دهد (یعنی معادل یک کد 5xx در HTTP).

کلاس های MapsNetworkError ، MapsRequestError و MapsServerError متعلق به کتابخانه هسته نقشه ها هستند. درباره کتابخانه ها بیشتر بیاموزید.

هر یک از این کلاس ها دارای ویژگی های زیر است:

ویژگی 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);
        }
    }
    // ...
}