Gestion des erreurs

Cette page explique comment gérer les erreurs lorsque vous utilisez l'API Maps JavaScript et la classe Place.

L'API Maps JavaScript utilise les classes d'erreur suivantes :

  • MapsNetworkError représente une erreur réseau provenant d'un service Web (peut inclure des erreurs RPCStatus).
  • MapsRequestError représente une erreur de requête provenant d'un service Web (c'est-à-dire l'équivalent d'un code 4xx en HTTP).
  • MapsServerError représente une erreur côté serveur d'un service Web (c'est-à-dire l'équivalent d'un code 5xx en HTTP).

Les classes MapsNetworkError, MapsRequestError et MapsServerError appartiennent à la bibliothèque Maps Core. En savoir plus sur les bibliothèques

Chacune de ces classes contient les propriétés suivantes :

La propriété code identifie le type d'erreur, tandis que la propriété endpoint identifie le point de terminaison qui a renvoyé l'erreur (par exemple, PLACES_DETAILS). Étant donné que MapsNetworkError est une sous-classe de Error, d'autres propriétés, y compris name et message, sont également disponibles.

L'extrait suivant montre la structure d'un message d'erreur 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'erreur brute inclut tout ce qui se trouve dans la chaîne d'erreur. error.message inclut l'intégralité de la chaîne d'erreur, à l'exception de error.name.

L'extrait suivant montre comment gérer les erreurs lors de l'utilisation de la classe Place. Cet exemple utilise un bloc try/catch pour gérer chacun des trois types d'erreurs. Un code similaire peut être utilisé pour gérer les erreurs de n'importe quelle classe de l'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);
        }
    }
    // ...
}