การจัดการข้อผิดพลาด

หน้านี้อธิบายวิธีจัดการข้อผิดพลาดเมื่อใช้ Maps JavaScript API และคลาส Place

Google Maps JavaScript API ใช้คลาสต่อไปนี้สำหรับข้อผิดพลาด

  • MapsNetworkError แสดงข้อผิดพลาดเกี่ยวกับเครือข่ายจากเว็บเซอร์วิส (อาจรวมถึงข้อผิดพลาด RPCStatus)
  • MapsRequestError แสดงข้อผิดพลาดของคำขอจากเว็บเซอร์วิส (เช่น เทียบเท่ากับโค้ด 4xx ใน HTTP)
  • MapsServerError แสดงถึงข้อผิดพลาดฝั่งเซิร์ฟเวอร์จากเว็บเซอร์วิส (เช่น เทียบเท่ากับโค้ด 5xx ใน HTTP)

คลาส MapsNetworkError, MapsRequestError และ MapsServerError อยู่ในไลบรารีหลักของ Maps ดูข้อมูลเพิ่มเติมเกี่ยวกับห้องสมุด

แต่ละคลาสจะมีพร็อพเพอร์ตี้ต่อไปนี้

พร็อพเพอร์ตี้ code ระบุประเภทข้อผิดพลาด ส่วนพร็อพเพอร์ตี้ endpoint ระบุปลายทางที่แสดงข้อผิดพลาด (เช่น PLACES_DETAILS) เนื่องจาก MapsNetworkError เป็นคลาสย่อยของ Error พร็อพเพอร์ตี้อื่นๆ รวมถึง name และ message จึงพร้อมใช้งานด้วย

ข้อมูลโค้ดต่อไปนี้แสดงโครงสร้างของข้อความแสดงข้อผิดพลาดของ 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 --->                ... ]
  

ข้อผิดพลาดดิบจะรวมทุกอย่างในสตริงข้อผิดพลาด ส่วน error.message จะรวมสตริงข้อผิดพลาดทั้งหมดโดยไม่รวม error.name

ข้อมูลโค้ดต่อไปนี้แสดงการจัดการข้อผิดพลาดเมื่อใช้คลาส Place ตัวอย่างนี้ใช้บล็อก try/catch เพื่อจัดการข้อผิดพลาดทั้ง 3 ประเภท คุณใช้โค้ดที่คล้ายกันเพื่อจัดการข้อผิดพลาดสำหรับคลาส 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);
        }
    }
    // ...
}