Trang này mô tả cách xử lý lỗi khi sử dụng Maps JavaScript API và lớp Place.
API JavaScript của Google Maps sử dụng các lớp sau cho lỗi:
-
MapsNetworkError
biểu thị lỗi mạng từ một dịch vụ web (có thể bao gồm các lỗi RPCStatus). -
MapsRequestError
biểu thị lỗi yêu cầu từ một dịch vụ web (tức là tương đương với mã 4xx trong HTTP). -
MapsServerError
biểu thị lỗi phía máy chủ từ một dịch vụ web (tức là tương đương với mã 5xx trong HTTP).
Các lớp MapsNetworkError
, MapsRequestError
và MapsServerError
thuộc thư viện cốt lõi của Maps.
Tìm hiểu thêm về thư viện.
Mỗi lớp này đều có các thuộc tính sau:
Thuộc tính code
xác định loại lỗi; thuộc tính endpoint
xác định điểm cuối trả về lỗi (ví dụ: PLACES_DETAILS
). Vì MapsNetworkError
là một lớp con của Error
, nên các thuộc tính khác, bao gồm cả name
và message
cũng có sẵn.
Đoạn mã sau đây cho thấy cấu trúc của một thông báo lỗi trên 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ỗi thô bao gồm mọi thứ trong chuỗi lỗi; error.message
bao gồm toàn bộ chuỗi lỗi, ngoại trừ error.name
.
Đoạn mã sau đây minh hoạ cách xử lý lỗi khi sử dụng lớp Place. Ví dụ này sử dụng một khối try/catch để xử lý từng loại lỗi trong số 3 loại lỗi. Bạn có thể dùng mã tương tự để xử lý lỗi cho mọi lớp API JavaScript của Maps.
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); } } // ... }