此页面介绍了在使用 Maps JavaScript API 和 Place 类时如何处理错误。
Google Maps JavaScript API 使用以下类来处理错误:
-
MapsNetworkError
表示来自 Web 服务的网络错误(可能包含 RPCStatus 错误)。 -
MapsRequestError
表示来自 Web 服务的请求错误(即 HTTP 中的 4xx 代码)。 -
MapsServerError
表示来自 Web 服务的服务器端错误(即 HTTP 中的 5xx 代码)。
MapsNetworkError
、MapsRequestError
和 MapsServerError
类属于 Maps 核心库。详细了解库。
每个类都包含以下属性:
code
属性用于标识错误类型;endpoint
属性用于标识返回错误的端点(例如 PLACES_DETAILS
)。由于 MapsNetworkError
是 Error
的子类,因此其他属性(包括 name
和 message
)也可用。
以下代码段展示了 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); } } // ... }