การทำความเข้าใจ async/await ใน Node.js

คู่มือ Node.js: async/await, promises, ฟังก์ชัน async, การจัดการข้อผิดพลาด เพื่อโค้ดสะอาดและมีประสิทธิภาพ

อาชว์

อาชว์

4 June 2025

การทำความเข้าใจ async/await ใน Node.js

การเขียนโปรแกรมแบบ Asynchronous ใน Node.js เป็นส่วนสำคัญของฟังก์ชันการทำงาน ทำให้สามารถดำเนินการแบบ non-blocking และมีประสิทธิภาพสูงได้ ไวยากรณ์ async/await ที่เปิดตัวใน ES2017 ได้ปฏิวัติวิธีการที่นักพัฒนาเขียนโค้ดแบบ asynchronous

ทำความเข้าใจ NodeJs

Node.js คือสภาพแวดล้อมรันไทม์ของ JavaScript ที่ช่วยให้คุณสามารถรันโค้ด JavaScript นอกเบราว์เซอร์ได้ Node.js สร้างขึ้นบน Google Chrome V8 JavaScript engine และใช้สำหรับการสร้างเว็บแอปพลิเคชัน โดยเฉพาะอย่างยิ่งแอปพลิเคชันที่เน้นข้อมูลและแบบเรียลไทม์ Node.js ยังมีไลบรารีของโมดูลและแพ็คเกจจำนวนมากที่คุณสามารถใช้เพื่อเพิ่มฟังก์ชันการทำงานให้กับโปรเจกต์ของคุณได้ ข้อดีบางประการของ Node.js ได้แก่:

NodeJs Website

Promises คืออะไร?

ใน JavaScript, Promise คืออ็อบเจกต์ที่แสดงถึงการดำเนินการแบบ asynchronous ที่จะเสร็จสมบูรณ์ (หรือล้มเหลว) ในที่สุดและค่าที่ได้จากการดำเนินการนั้น ช่วยให้คุณทำงานกับการดำเนินการแบบ asynchronous ได้อย่าง synchronous มากขึ้น นี่คือรายละเอียดว่า Promise คืออะไรและทำงานอย่างไร:

States: Promise อยู่ในสถานะใดสถานะหนึ่งเหล่านี้:

วิธีการประกาศฟังก์ชัน Async

การประกาศฟังก์ชัน async ใน JavaScript นั้นง่ายมาก คุณเพียงแค่ใส่คำว่า async นำหน้าการประกาศฟังก์ชัน ซึ่งเป็นการส่งสัญญาณว่าฟังก์ชันนั้นเป็นแบบ asynchronous และสามารถมีนิพจน์ await หนึ่งรายการขึ้นไปได้ นี่คือไวยากรณ์พื้นฐาน:

async function functionName(parameters) {
  // function body
}

นี่คือตัวอย่างของฟังก์ชัน async ที่ดึงข้อมูลจาก API:

async function fetchData(url) {
  try {
    const response = await fetch(url);
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('An error occurred:', error);
  }
}

ในตัวอย่างนี้ fetchData คือฟังก์ชัน async ที่ใช้ await เพื่อรอให้การเรียก fetch แก้ไขก่อนดำเนินการต่อ หากการเรียก fetch สำเร็จ จะประมวลผลการตอบสนองและส่งคืนข้อมูล หากมีข้อผิดพลาด จะถูกจับและบันทึกลงในคอนโซล

Await คืออะไร?

คำสำคัญ await ใน JavaScript ใช้ภายในฟังก์ชัน async เพื่อหยุดการดำเนินการของฟังก์ชันจนกว่า Promise จะได้รับการแก้ไข เมื่อคุณใช้ await ฟังก์ชันจะรอให้ Promise settle จากนั้นจึงดำเนินการต่อด้วยผลลัพธ์ของ Promise หาก Promise ถูกปฏิเสธ นิพจน์ await จะโยนค่าที่ถูกปฏิเสธ ทำให้คุณสามารถจัดการได้ด้วยบล็อก try/catch

นี่คือตัวอย่างง่ายๆ เพื่อสาธิต await:

async function getUserData() {
  try {
    let response = await fetch('/user/data');
    let data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('An error occurred:', error);
  }
}

getUserData();

ในตัวอย่างนี้ getUserData คือฟังก์ชัน async ที่ดึงข้อมูลผู้ใช้ คำสำคัญ await ใช้เพื่อรอให้การเรียก fetch แก้ไขก่อนดำเนินการต่อไปยังบรรทัดถัดไป ซึ่งยังใช้ await เพื่อรอให้การเรียก response.json() แก้ไข หาก promise ใดๆ เหล่านี้ถูกปฏิเสธ ข้อผิดพลาดจะถูกจับในบล็อก catch

ทำไมต้องใช้ Async/Await?

การใช้ async และ await ในการเขียนโปรแกรม โดยเฉพาะอย่างยิ่งใน NodeJs มีข้อดีหลายประการ:

  1. ทำให้โค้ด Asynchronous ง่ายขึ้น: ช่วยให้คุณเขียนโค้ดแบบ asynchronous ที่ดูและมีพฤติกรรมคล้ายกับโค้ด synchronous ทำให้เข้าใจและบำรุงรักษาได้ง่ายขึ้น
  2. ปรับปรุงการอ่านได้: โดยหลีกเลี่ยงสถานการณ์ "callback hell" หรือ "pyramid of doom" ซึ่งคุณมี callback ที่ซ้อนกันหลายรายการ โค้ดจะสะอาดและอ่านง่ายขึ้น
  3. การจัดการข้อผิดพลาด: ช่วยให้จัดการข้อผิดพลาดได้ดีขึ้นด้วยบล็อก try/catch ซึ่งคล้ายกับโค้ด synchronous ซึ่งไม่ตรงไปตรงมาเท่ากับการใช้วิธีการแบบ callback-based แบบดั้งเดิม
  4. การควบคุมการไหล: ช่วยให้คุณควบคุมการไหลของการดำเนินการแบบ asynchronous ได้ดีขึ้น ทำให้คุณสามารถเขียนโค้ดที่ดำเนินการในลักษณะที่คาดการณ์ได้มากขึ้น
  5. Non-Blocking: await หยุดการดำเนินการของฟังก์ชัน async และรอให้ Promise แก้ไขโดยไม่บล็อก thread หลัก ทำให้การดำเนินการอื่นๆ ดำเนินต่อไปในพื้นหลังได้

การจัดการข้อผิดพลาดด้วย Async/Await

การจัดการข้อผิดพลาดด้วย async/await ใน JavaScript นั้นตรงไปตรงมาและคล้ายกับการจัดการข้อผิดพลาดแบบ synchronous โดยใช้บล็อก try/catch นี่คือวิธีที่คุณสามารถจัดการข้อผิดพลาดในฟังก์ชัน async:

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error fetching data:', error);
  }
}

fetchData();

ในตัวอย่างข้างต้น หากการเรียก fetch ล้มเหลว หรือหากมีข้อผิดพลาดในการแยกวิเคราะห์ JSON ข้อผิดพลาดจะถูกจับในบล็อก catch ซึ่งช่วยให้สามารถจัดการข้อผิดพลาดแบบรวมศูนย์ ซึ่งมีประโยชน์อย่างยิ่งเมื่อจัดการกับการดำเนินการแบบ asynchronous หลายรายการ

โปรดจำไว้ว่า การปฏิเสธ promise ที่ไม่ได้จัดการยังคงเกิดขึ้นได้หากข้อผิดพลาดไม่ถูกจับอย่างถูกต้อง สิ่งสำคัญคือต้องตรวจสอบให้แน่ใจว่า promise ทุกรายการมีตัวจัดการ .catch() หรืออยู่ในบล็อก try/catch ในฟังก์ชัน async เพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้นในแอปพลิเคชันของคุณ

Async/Await กับ Apidog

Apidog ไม่ใช่แค่แพลตฟอร์มการพัฒนา API เท่านั้น แต่เป็นชุดเครื่องมือที่ครอบคลุมซึ่งช่วยปรับปรุงวงจรชีวิต API ทั้งหมด ด้วยแนวทาง design-first Apidog ช่วยให้มั่นใจได้ว่า API ของคุณไม่เพียงแต่ใช้งานได้จริงเท่านั้น แต่ยังใช้งานง่ายและเป็นมิตรกับผู้ใช้อีกด้วย

การใช้ async/await กับ Apidog ช่วยเพิ่มประสิทธิภาพในการจัดการคำขอและคำตอบ API ช่วยให้นักพัฒนาสามารถเขียนโค้ดที่สะอาดและอ่านง่าย ทำให้การแก้ไขข้อบกพร่องเป็นเรื่องง่าย

Apidog Interface

บทสรุป

Async/await ใน Node.js เป็นคุณสมบัติที่มีประสิทธิภาพที่ช่วยลดความซับซ้อนในการเขียนโค้ดแบบ asynchronous ด้วยการทำความเข้าใจและใช้ไวยากรณ์นี้ นักพัฒนาสามารถเขียนแอปพลิเคชันที่มีประสิทธิภาพ อ่านง่าย และบำรุงรักษาได้มากขึ้น

Explore more

วิธีเรียกใช้ Mistral Small 3.1 ในเครื่องของคุณเองโดยใช้ Ollama: คู่มือทีละขั้นตอน

วิธีเรียกใช้ Mistral Small 3.1 ในเครื่องของคุณเองโดยใช้ Ollama: คู่มือทีละขั้นตอน

เรียนรู้วิธีรัน Mistral Small 3.1 (AI โอเพนซอร์ส) บนเครื่องคุณเองด้วย Ollama คู่มือนี้ง่าย ครอบคลุมการติดตั้ง, การใช้งาน, และเคล็ดลับ

19 March 2025

NDJSON 101: การสตรีมผ่าน HTTP Endpoints

NDJSON 101: การสตรีมผ่าน HTTP Endpoints

ค้นพบ NDJSON: สตรีมข้อมูลผ่าน HTTP อย่างมีประสิทธิภาพ! คู่มือนี้อธิบายพื้นฐาน, ข้อดีเหนือ JSON, และวิธี Apidog ช่วยทดสอบ/แก้จุดบกพร่อง endpoint สตรีมมิ่ง

18 March 2025

วิธีนำเข้า/ส่งออกข้อมูลคอลเลกชันใน Postman

วิธีนำเข้า/ส่งออกข้อมูลคอลเลกชันใน Postman

ในบทความนี้ เราจะคุยเรื่องนำเข้า/ส่งออก Postman และวิธีแก้ปัญหาที่ยืดหยุ่นกว่า ไม่จำกัดจำนวนครั้ง

18 March 2025

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API