错误处理

此页面介绍了在使用 Maps JavaScript API 和 Place 类时如何处理错误。

Google Maps JavaScript API 使用以下类来处理错误:

  • MapsNetworkError 表示来自 Web 服务的网络错误(可能包含 RPCStatus 错误)。
  • MapsRequestError 表示来自 Web 服务的请求错误(即 HTTP 中的 4xx 代码)。
  • MapsServerError 表示来自 Web 服务的服务器端错误(即 HTTP 中的 5xx 代码)。

MapsNetworkErrorMapsRequestErrorMapsServerError 类属于 Maps 核心库。详细了解

每个类都包含以下属性:

code 属性用于标识错误类型;endpoint 属性用于标识返回错误的端点(例如 PLACES_DETAILS)。由于 MapsNetworkErrorError 的子类,因此其他属性(包括 namemessage)也可用。

以下代码段展示了 Google 地图错误消息的结构:

  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 块来处理这三种错误类型中的每一种。类似的代码可用于处理任何 Maps 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);
        }
    }
    // ...
}