Manejo de errores

En esta página, se describe cómo controlar los errores cuando se usa la API de Maps JavaScript y la clase Place.

La API de Google Maps JavaScript usa las siguientes clases para los errores:

  • MapsNetworkError representa un error de red de un servicio web (puede incluir errores de RPCStatus).
  • MapsRequestError representa un error de solicitud de un servicio web (es decir, el equivalente a un código 4xx en HTTP).
  • MapsServerError representa un error del servidor de un servicio web (es decir, el equivalente a un código 5xx en HTTP).

Las clases MapsNetworkError, MapsRequestError y MapsServerError pertenecen a la biblioteca principal de Maps. Obtén más información sobre las bibliotecas.

Cada una de estas clases contiene las siguientes propiedades:

La propiedad code identifica el tipo de error; la propiedad endpoint identifica el extremo que devolvió el error (por ejemplo, PLACES_DETAILS). Dado que MapsNetworkError es una subclase de Error, también están disponibles otras propiedades, como name y message.

En el siguiente fragmento, se muestra la estructura de un mensaje de error de 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 --->                ... ]
  

El error sin procesar incluye todo lo que se encuentra en la cadena de error; error.message incluye toda la cadena de error, excepto error.name.

En el siguiente fragmento, se muestra el control de errores cuando se usa la clase Place. En este ejemplo, se usa un bloque try/catch para controlar cada uno de los tres tipos de errores. Se puede usar código similar para controlar los errores de cualquier clase de la API de 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);
        }
    }
    // ...
}