Xử lý lỗi

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, MapsRequestErrorMapsServerError 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ả namemessage 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);
        }
    }
    // ...
}