Programming Track
JavaScript
Async JavaScript
Callbacks
เรียนรู้ callback function สำหรับส่งงานให้โค้ดอื่นเรียกทีหลัง เข้าใจการส่ง function เป็นค่า และข้อควรระวังเมื่อ callback ซ้อนกัน
Callback คืออะไร
callback คือ function ที่เราส่งเข้าไปให้ function อื่นเรียกทีหลัง ใช้บ่อยเมื่อโค้ดบางอย่างยังไม่ควรทำทันที เช่น รอให้ผู้ใช้กดปุ่ม รอ timer หรือรอผลลัพธ์จากงานที่ใช้เวลา แนวคิดสำคัญคือ เราไม่ได้เรียก callback เองทันทีเสมอไป แต่ส่ง function ไว้ให้เจ้าของงานเป็นคนเรียกเมื่อถึงเวลาที่เหมาะสม
ส่ง function เข้าไปเป็น callbackJS
runTask รับ callback แล้วเรียกเมื่อทำงานเสร็จ
function runTask(taskName, done) {
console.log("เริ่ม:", taskName);
done(taskName + " เสร็จแล้ว");
}
runTask("ตรวจคำตอบ", function (message) {
console.log(message);
});
// output:
// เริ่ม: ตรวจคำตอบ
// ตรวจคำตอบ เสร็จแล้วใช้ callback เมื่อไหร่
- เมื่อต้องการให้ผู้ใช้โค้ดกำหนดสิ่งที่จะทำต่อเอง
- เมื่องานเกิดทีหลัง เช่น click, timer, หรือผลลัพธ์จากระบบอื่น
- เมื่ออยากแยก function หลักออกจากรายละเอียดหลังงานเสร็จ
callback กับ setTimeoutJS
setTimeout รับ callback แล้วเรียกหลังเวลาที่กำหนด
console.log("ก่อนรอ");
setTimeout(function () {
console.log("รอครบ 1 วินาทีแล้ว");
}, 1000);
console.log("หลังตั้งเวลา");
// output ทันที:
// ก่อนรอ
// หลังตั้งเวลา
// แล้วอีกประมาณ 1 วินาที:
// รอครบ 1 วินาทีแล้วสิ่งที่ต้องระวัง
| จุดที่พลาดบ่อย | ปัญหา | วิธีคิด |
|---|---|---|
| เรียก callback ทันทีโดยไม่ตั้งใจ | โค้ดทำงานก่อนเวลาที่ต้องการ | ส่งชื่อ function หรือ function expression เข้าไป ไม่ใช่ผลลัพธ์ของการเรียก |
| ซ้อน callback หลายชั้น | อ่านยากและ debug ยาก | แยกเป็น function ชื่อชัด หรือค่อยไปใช้ Promise ในบทถัดไป |
| ลืมส่งข้อมูลให้ callback | callback ไม่มีค่าที่ต้องใช้ | ออกแบบ parameter ให้ชัดว่า callback จะได้รับอะไร |