Обработка ошибок

На этой странице описывается, как обрабатывать ошибки при использовании Maps JavaScript API и класса Place.

API JavaScript Google Maps использует следующие классы для ошибок:

  • MapsNetworkError представляет собой сетевую ошибку веб-службы (может включать ошибки RPCStatus ).
  • MapsRequestError представляет собой ошибку запроса от веб-службы (т.е. эквивалент кода 4xx в HTTP).
  • MapsServerError представляет собой ошибку на стороне сервера от веб-службы (т.е. эквивалент кода 5xx в HTTP).

Классы MapsNetworkError , MapsRequestError и MapsServerError относятся к основной библиотеке карт . Подробнее о библиотеках

Каждый из этих классов содержит следующие свойства:

Свойство code определяет тип ошибки; свойство endpoint определяет конечную точку, вернувшую ошибку (например, PLACES_DETAILS ). Поскольку MapsNetworkError является подклассом Error , доступны также другие свойства, включая name и message .

В следующем фрагменте показана структура сообщения об ошибке Карт:

  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 используется для обработки каждого из трёх типов ошибок. Похожий код можно использовать для обработки ошибок любого класса 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);
        }
    }
    // ...
}