Skip to content

Tag: node.js

Node.js | ข้อควรระวังการใช้งาน Async/Await กับ forEach()

หลายคนเข้าใจว่า function ใดๆ ที่รับ callback function เป็น parameter จะทำงานแบบ async เสมอ ซึ่งเป็นความเข้าใจที่ผิด (ผมก็เคยเข้าใจแบบนั้น) แต่บาง function ก็ทำงานแบบ synchrous นะครับ เช่น  forEach()  ที่เป็น built-in function ของ collection ใน JavaScript ก็ทำงานแบบ synchronous เช่นกัน ดู spec ที่นี่

สมมุติว่าผมต้องการ ใช้ async/await กับ forEach() ผมก็สามารถใช้งาน async กับ callback function ที่ส่งเข้าไป เพื่อให้ใช้ await ได้เช่นกัน ดูตัวอย่างโค้ดนี้ครับ

Node.js | ลองใช้งาน Async/Await กับ Node 7

Node 7 ออกแล้วนะครับ ตอนนี้รองรับ Es6 features ถึง 98% แล้ว ที่นักพัฒนาดูจะให้ความสนใจกันเป็นพิเศษคือสามารถใช้งาน async/await ซึ่งเป็น synctax  ของ Es7 ได้โดยไม่ต้องติดตั้งตัว transpile อย่าง Babel เพิ่มเติม

แต่ …. ยังไม่ได้เปิดใช้งานเป็นค่า default ถ้าอยากใช้ async/await ต้องใส่ option --harmony-async-await  ตอนรัน 

บันทึกการใช้งาน Socket.io v1 และประเด็นที่น่าสนใจ

ใครที่ใช้ Node.js ในการทำ real-time application น่าจะรู้จัก WebSocket และ Socket.io กันเป็นอย่างดี ตอนนี้ Socket.io เดินทางมาถึง version 1 แล้ว (ล่าสุดที่ผมเขียนโพสต์นี้คือ 1.5.0) ซึ่งก็มีหลายอย่างเปลี่ยนไปจากรุ่น 0.9 ค่อนข้างมาก หลายโปรเจกต์ที่ผมเคยเขียนไว้ด้วย version 0.9 ตอนนี้ก็ outdated ไปแล้วไม่สามารถใช้งาน version 1 ได้ แต่ก็มีบางงานที่ใช้ version 1 แล้ว พบประเด็นที่น่าสนใจเลยอยากบันทึกไว้สักหน่อย

Node.js | Test doubles ด้วย Sinon.js

การทำ unit test คือการทดสอบโค้ดโดยไม่สน dependencies ภายนอกอย่างเช่น database CRUD, Web services, APIs เพราะ unit test คือการทดสอบแค่การทำงานของฟังก์ชันนั้นๆ ว่าเป็นไปตาม flow ทำงานได้ถูกต้องตาม logic หรือไม่ เพื่อเป็นการลดความยุ่งยากเราจึงต้องจำลองการทำงานของโค้ดส่วนที่มีการติดต่อกับภายนอก

รัน Node.js application ตลอดเวลาด้วย PM2

สำหรับคนเขียน application ด้วย Node.js คงใช้งานกันอยู่แล้วแหละแต่อธิบายก่อนสำหรับคนที่ไม่รู้ PM2 เป็นเครื่องมือ processes monitoring สำหรับ Node.js (จริงๆ แล้วใช้กับภาษาอื่นได้ด้วยแต่ต้อง config interpreter เอา) หน้าที่หลักของมันคือ “watch” application ของเราว่าทำงานอยู่หรือไม่ ถ้าตายก็ให้ start ขึ้นมาใหม่ ความเจ๋งของ PM2 คือมันสามารถรัน cluster mode ได้ด้วยโดยที่เราไม่ต้องเขียน code เพิ่มเลย!

อันนี้คือที่ผมใช้อยู่

ใช้งาน Promise ใน Node.js ด้วย Bluebird

ทำไมควรใช้ Promise? ทำไมถึงควรใช้ Bluebird?

โพสต์ที่แล้วผมแนะนำ lib สำหรับจัดการ control flow ของ Node.js ไปคือ Async และ Bluebird ซึ่ง Async ทุกคนที่เขียน Node.js คงคุ้นเคยกันดีเพราะเป็นสไตล์ callback pattern แต่ Bluebird อาจจะยังไม่คุ้นเคยกันเพราะใช้ Promise pattern หรืออาจจะใช้กันเป็นปกติอยู่แล้วก็ไม่รู้ แต่ผมไม่สนใจครับ โพสต์นี้ผมจะมาสอนจระเข้ว่ายน้ำ (นี่แน่ะ!)

Promise ที่เป็น built-in ฟีเจอร์ของ ES6 ถึงจะสะดวกแต่ส่วนตัวผมมองว่ามันก็ยังไม่ค่อยสะดวกเท่าไหร่ถ้ามีการใช้งานในรูปแบบที่ซับซ้อนขึ้น เช่น การจัดการกับ Promise array หรือ Promise Map เพราะ class Promise ของ ES6 เองเป็น class พื้นฐานฟีเจอร์จึงน้อย Bluebird เลยสะดวกกว่า