Tratamento de erros

Nesta página, descrevemos como processar erros ao usar a API Maps JavaScript e a classe Place.

A API Maps JavaScript usa as seguintes classes para erros:

  • MapsNetworkError representa um erro de rede de um serviço da Web (pode incluir erros de RPCStatus).
  • MapsRequestError representa um erro de solicitação de um serviço da Web, ou seja, o equivalente a um código 4xx em HTTP.
  • MapsServerError representa um erro do lado do servidor de um serviço da Web, ou seja, o equivalente a um código 5xx em HTTP.

As classes MapsNetworkError, MapsRequestError e MapsServerError pertencem à biblioteca principal do Maps (link em inglês). Saiba mais sobre bibliotecas.

Cada uma dessas classes contém as seguintes propriedades:

A propriedade code identifica o tipo de erro, e a propriedade endpoint identifica o endpoint que retornou o erro (por exemplo, PLACES_DETAILS). Como MapsNetworkError é uma subclasse de Error, outras propriedades, incluindo name e message, também estão disponíveis.

O snippet a seguir mostra a estrutura de uma mensagem de erro do 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 --->                ... ]
  

O erro bruto inclui tudo na string de erro. error.message inclui a string de erro inteira, exceto error.name.

O snippet a seguir demonstra o tratamento de erros ao usar a classe Place. Este exemplo usa um bloco try/catch para processar cada um dos três tipos de erro. Um código semelhante pode ser usado para processar erros em qualquer classe da 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);
        }
    }
    // ...
}