Gestione degli errori

Questa pagina descrive come gestire gli errori durante l'utilizzo dell'API Maps JavaScript e della classe Place.

L'API Google Maps JavaScript utilizza le seguenti classi per gli errori:

  • MapsNetworkError rappresenta un errore di rete di un servizio web (può includere errori RPCStatus).
  • MapsRequestError rappresenta un errore di richiesta da un servizio web (ovvero l'equivalente di un codice 4xx in HTTP).
  • MapsServerError rappresenta un errore lato server di un servizio web (ovvero l'equivalente di un codice 5xx in HTTP).

Le classi MapsNetworkError, MapsRequestError e MapsServerError appartengono alla libreria principale di Maps. Scopri di più sulle librerie.

Ognuna di queste classi contiene le seguenti proprietà:

La proprietà code identifica il tipo di errore, mentre la proprietà endpoint identifica l'endpoint che ha restituito l'errore (ad esempio PLACES_DETAILS). Poiché MapsNetworkError è una sottoclasse di Error, sono disponibili anche altre proprietà, tra cui name e message.

Il seguente snippet mostra la struttura di un messaggio di errore di 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 --->                ... ]
  

L'errore non elaborato include tutto ciò che è presente nella stringa di errore; error.message include l'intera stringa di errore, escluso error.name.

Il seguente snippet mostra la gestione degli errori quando si utilizza la classe Place. Questo esempio utilizza un blocco try/catch per gestire ciascuno dei tre tipi di errore. Un codice simile può essere utilizzato per gestire gli errori per qualsiasi classe dell'API Maps JavaScript.

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