สอน Node.js ตอนที่ 5 เข้าใจ Callback ของ Node.js

สอน Node.js ตอนที่ 5 เข้าใจ Callback ของ Node.js

ภายใน Node.js นั่น การทำงานเป็นแบบ Asynchronous เป็นหลัก คือการทำงานแบบไม่รอผลลัพธ์ที่ตอบกลับมา โดยจะไปทำคำสั่งต่อไปในทันที เมื่อผลลัพธ์ส่งกลับมาจะมาเรียก Callback Function ให้ทำงาน แตกต่างกับการทำงานแบบ Synchronous ที่ต้องรอผลลัพธ์ส่งกลับมาก่อนเสมอ ถึงค่อยทำคำสั่งต่อไปได้ โดยมี Event Loop เป็นตัวควบคุม

Feb 25, 2018

แก้ไขล่าสุด มีผู้อ่าน 1,728  |  NODE.JS

ภายใน Node.js นั่น การทำงานเป็นแบบ Asynchronous เป็นหลัก คือการทำงานแบบไม่รอผลลัพธ์ที่ตอบกลับมา โดยจะไปทำคำสั่งต่อไปในทันที เมื่อผลลัพธ์ส่งกลับมาจะมาเรียก Callback Function ให้ทำงาน แตกต่างกับการทำงานแบบ Synchronous ที่ต้องรอผลลัพธ์ส่งกลับมาก่อนเสมอ ถึงค่อยทำคำสั่งต่อไปได้ การทำงานแบบ Asynchronous & Callback ใน Node.js นั่นมีมี Event Loop เป็นตัวควบคุม

Callback (การเรียกกลับ)

เพื่อให้เข้าใจการทำงานแบบ Asynchronous, Synchronous เริ่มต้นลองสร้างไฟล์ input.txt ไว้ใน Project พิมพ์ข้อความลงไปเป็นอะไรก็ได้ ตัวอย่างเช่น

This is a Node.js. It is not difficult.
But You try to code with Node.js. Okay.

เราจะมาเขียนโค้ดให้ Node.js อ่านข้อความจากไฟล์ แสดงบนออกมาหน้าจอ Console กัน


 

Blocking

เขียนแบบ Synchronous สร้างไฟล์ blocking-code.js แล้วใส่โค้ดตามด้านล่างเพื่อ ทดสอบการทำงานแบบ Synchronous 

var fs = require("fs");

var data = fs.readFileSync('input.txt'); // WAIT UNTIL READ FILE FINISH

console.log(data.toString());
console.log("----- Ended -----");

เรียกให้ blocking-code.js ทำงาน

$ node blocking-code.js

ผลลัพธ์

This is a Node.js. It is not difficult.
But You try to code with Node.js. Okay.
----- Ended -----

สังเกตุว่า ข้อความในไฟล์แสดงก่อนคำว่า ----- Ended ----- ตามลำดับคำสั่งที่เราเขียนขึ้น

 

Non-Blocking


เขียนแบบ Asynchronous สร้างไฟล์ non-blocking-code.js แล้วใส่โค้ดตามด้านล่างเพื่อ ทดสอบการทำงานแบบ Asynchronous 

var fs = require("fs");

fs.readFile('input.txt', function (err, data) { // CALLBACK FUNCTION
   if (err) return console.error(err);
   console.log(data.toString());
});

console.log("----- Ended -----");

เรียกให้ non-blocking-code.js ทำงาน

$ node non-blocking-code.js

ผลลัพธ์

----- Ended -----
This is a Node.js. It is not difficult.
But You try to code with Node.js. Okay.

สังเกตุว่า ข้อความ ----- Ended -----  แสดงผลก่อนแล้วตามด้วยข้อความในไฟล์ ไม่เกิดการรอ

 

ภายใน Node.js ที่มี Modules ต่างๆ ให้เราเรียกใช้งานส่วนใหญ่แล้วเป็นแบบ Asynchronous และ Callback ดังนั้นถ้าเราเข้าใจ Concept นี้ การเขียนแอพพลิเคชั่นบน Node.js ก็ไม่ยากเกินความสามารถครับ 


แบ่งปัน

ชอบ +1

บันทึก

ฝากคำถาม คำแนะนำ ได้ที่

Facebook : Share.OlanLab.Com
LINE ID : @olanlab
อีเมล์ : olan@olanlab.com
Share คลังความรู้ด้านเทคโนโลยี สารสนเทศ นวัตกรรมคอมพิวเตอร์ สอนเขียนโปรแกรม Php Java Html CSS Javascript C C++ Objective-C และอื่นๆ บนระบบปฏิบัติการ Window Linux Unix CentOS IOS Android
โดยผู้เขียนที่มีความเชี่ยวชาญเฉพาะ ให้บริการพื้นที่สำหรับนักเขียนที่ต้องการแบ่งปันความรู้ พร้อมให้คำปรึกษาแก่ผู้ที่สนใจ โดยไม่เสียค่าใช้จ่าย