วิธีแก้ SyntaxError: await is only valid in async function บนชั้นนอกสุด
ใครที่เคยเขียน NodeJS มือใหม่คงจะเคยเจอ SyntaxError: await is only valid in async function อ่านแล้วก็เข้าใจเลยว่าจะต้องเอา await ไปไว้ใน async ฟังก์ชัน แต่ถ้าอยากใช้ await อยู่ชั้นนอกสุดล่ะจะทำยังไง ผมมีคำตอบ
ตัวอย่างโค้ดที่เกิด SyntaxError บรรทัดที่ 6
วิธีแก้แบบที่ 1 เรียกใช้ .then() แล้วเขียน callback ใส่เข้าไปแทน จับ error ด้วยการใช้ callback ใน .catch()
วิธีแก้แบบที่ 2 สำหรับคนที่เกลียดการใช้ callback ชาตินี้ปวารณาตัวเองจะไม่เขียน callback ตลอดชีวิต ก็ใช้สร้างฟังก์ชันเปล่าๆ ขึ้นมา(ในตัวอย่างคือ main()) แล้วใส่ async หน้ามัน เขียนโค้ด await ตามปกติข้างใน ใส่ try catch เอาไว้ด้วย แล้วเรียกชื่อฟังก์ชันนั้นแล้วตามด้วย .then() เปล่าๆ
ง่ายๆ ใช่ไหมล่ะครับ แต่ผมเองเคยติดอยู่ตรงนี้นานมาก Google ก็ไม่เจอเพราะว่ามันง่ายเกินไป โทษตัวเองว่าทำไมเราโง่อย่างงี้ อันที่จริงๆ ผมไม่ได้โง่ ผมแค่ไม่รู้เท่านั้นเองครับ
ที่มา
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises