ตัวอย่างการใช้งาน Async/Await (ES2017)

Promise -> Async/await

วันนี้จะมาสรุปเกี่ยวกับเรื่อง async/await กันสักนิด หลังจากได้ลองทำ workshop สอนน้องๆในทีมไป

โดยที่ async/await นั้น เป็น syntax ที่จะทำให้การเขียน asynchronous ที่เมื่อก่อนเต็มไปด้วย callback หายไปและสามารถใช้งานร่วมกับ promise ได้ โดยจะมีการเขียนคล้ายๆกับแบบ synchronous ปกติเลย มาลองทำความรู้จักกันนะ

Async/await 101

  • เป็นวิธีใหม่สำหรับการเขียน asynchronous โดยที่เมื่อก่อน ถ้าเราจะเขียนโค็ดเราให้เป็น asynchronous ต้องเลือกใช้ callback หรือ promise เท่านั้น
  • จริงๆ เจ้า async/await แล้วมันไม่ได้มาแทน promise ซะทีเดียว แต่มันทำงานร่วมกันได้ แต่ async/await ไม่สามารถใช้งานร่วมกับ callback ได้
  • มีลักษณะเหมือนกับ promise, non blocking
  • ทำให้การเขียน asynchronous ของเราดูเหมือนการเขียนแบบ synchronous ทำให้สามารถเข้าใจได้ง่าย

โค๊ดตัวอย่างการใช้งานในรูปแบบต่างๆ

Convert promise to async/await

Promise

ลองแปลงเป็นแบบ async/await

Convert promise to async/await

Handle Errors

โดยการ Error handler เราจะใช้ try..catch เข้ามาช่วย

Error handler

Await Multiple Promises Concurrently with Promise.all

ลองแปลงโค๊ดโดยนำ promise.all มาใช้งานแทน

Await Multiple Promises Concurrently with Promise.all

Conclusion

Async/await เป็นหนึ่งในฟิเจอร์ที่น่าสนใจ โดยจะทำให้โค๊ดที่เกี่ยวกับการใช้งาน asynchronous ดูเข้าใจง่ายและสะอาดมากขึ้น

** ปัจจุบันถ้าเราต้องการใช้งาน async/await โดยไม่ต้อง compile ใดๆ ต้องใช้ nodejs version 7.6 ขึ้นไปนะครับ
** ส่วนของฝั่งfrontend ส่วนใหญ่จะมีการแปลงด้วย webpack ก่อนนำไปใช้งานอยู่ ทำให้สามารถใช้งานได้เลย
https://babeljs.io/docs/usage/polyfill/

Source Code: https://github.com/gokusenz/workshop-async-await-es7

คิดและเขียนคือสิ่งที่ผมชอบ ได้ทดลองทำอะไรใหม่ๆ เพื่อนำมาประยุกต์และต่อยอดในเรื่องต่างๆ พร้อมถ่ายทอดเรื่องราวจากชีวิตจริง จากประสบการณ์ จากแนวคิดของผม :)

--

--