JavaScript
Async JavaScript
async / await
เรียนรู้ async / await เพื่อเขียน Promise ให้อ่านเป็นลำดับ เข้าใจว่า async function return Promise และ await รอผลลัพธ์โดยไม่บล็อกทั้งโปรแกรม
async / await คืออะไร
`async / await` คือ syntax สำหรับเขียนโค้ดที่ทำงานกับ Promise ให้อ่านเหมือนลำดับปกติ `async` วางหน้า function เพื่อบอกว่า function นี้จะ return Promise เสมอ `await` ใช้ข้างใน async function เพื่อรอ Promise สำเร็จ แล้วนำค่าที่ resolve ออกมาใช้ต่อ
function loadName() {
return Promise.resolve("Mali");
}
async function showName() {
const name = await loadName();
console.log(name); // Mali
}
showName();ลำดับการทำงาน
`await` ทำให้ async function หยุดรอเฉพาะภายใน function นั้น แต่ไม่ได้หยุด JavaScript ทั้งหน้า โค้ดนอก async function ยังทำงานต่อได้ นี่คือเหตุผลที่ async code ไม่ทำให้หน้าเว็บค้างระหว่างรอผลลัพธ์
async function run() {
console.log("ก่อน await");
await Promise.resolve();
console.log("หลัง await");
}
run();
console.log("โค้ดข้างนอก");
// output:
// ก่อน await
// โค้ดข้างนอก
// หลัง awaitใช้ await กับหลายขั้นตอน
เมื่อขั้นตอนถัดไปต้องใช้ผลลัพธ์จากขั้นก่อนหน้า ให้ใช้ `await` ทีละบรรทัด จะอ่านง่ายกว่าการต่อ `.then()` ยาว ๆ แต่ถ้างานหลายอย่างไม่ต้องรอกัน ควรเริ่ม Promise พร้อมกันแล้วค่อยรอทีหลัง เพื่อลดเวลารวม
| รูปแบบ | เหมาะกับ | ข้อควรระวัง |
|---|---|---|
| await ทีละบรรทัด | ขั้นตอนที่ต้องใช้ค่าจากขั้นก่อนหน้า | ถ้างานไม่เกี่ยวกันจะช้ากว่าที่จำเป็น |
| Promise.all() | งานหลายอย่างที่เริ่มพร้อมกันได้ | ถ้า Promise ใด reject ทั้งชุดจะ reject |
| return ค่าใน async function | ส่งผลลัพธ์กลับให้ผู้เรียก | ผู้เรียกยังต้อง await หรือ then เพื่อรับค่า |