Bluebird NPM: Bluebird JS Promise พร้อมตัวอย่าง
บลูเบิร์ด JS คืออะไร?
Bluebird JS เป็นไลบรารี Promise ที่มีคุณลักษณะครบถ้วนสำหรับ Javaสคริปต์ คุณสมบัติที่แข็งแกร่งที่สุดของ Bluebird คือมันช่วยให้คุณ "สัญญา" กับโมดูล Node อื่นๆ เพื่อใช้แบบอะซิงโครนัสได้ Promisify เป็นแนวคิดที่นำไปใช้กับฟังก์ชันคอลแบ็ก แนวคิดนี้ใช้เพื่อให้แน่ใจว่าฟังก์ชันคอลแบ็กทุกฟังก์ชันที่ถูกเรียกใช้จะส่งคืนค่าบางอย่างกลับมา
ดังนั้นถ้าก NodeJS module มีฟังก์ชัน callback ซึ่งไม่ส่งคืนค่า และหากเราสัญญาโมดูลโหนด ฟังก์ชันทั้งหมดในโมดูลโหนดนั้นจะถูกแก้ไขโดยอัตโนมัติเพื่อให้แน่ใจว่าจะส่งคืนค่า
ดังนั้นคุณสามารถใช้ BlueBird เพื่อสร้าง MongoDB โมดูลทำงานแบบอะซิงโครนัส ซึ่งช่วยเพิ่มระดับความสะดวกอีกขั้นเมื่อเขียนแอปพลิเคชัน Node.js
เราจะดูตัวอย่างวิธีใช้โมดูล bluebird
ตัวอย่างของเราจะสร้างความเชื่อมต่อกับ "คอลเลกชันพนักงาน" ในฐานข้อมูล "EmployeeDB" ก่อน หากสร้างการเชื่อมต่อ "จากนั้น" ก็จะรับบันทึกทั้งหมดในคอลเลกชันและแสดงในคอนโซลตามลำดับ
วิธีสร้างสัญญาด้วย Bluebird JS Library
นี่คือตัวอย่างทีละขั้นตอนในการ สร้างคำมั่นสัญญา ด้วยไลบรารี Bluebird JS:
ขั้นตอนที่ 1) การติดตั้งโมดูล NPM
หากต้องการใช้ Bluebird จากภายในแอปพลิเคชัน Node จำเป็นต้องมีโมดูล Bluebird หากต้องการติดตั้งโมดูล Bluebird ให้รันคำสั่งด้านล่าง
npm ติดตั้งบลูเบิร์ด
ขั้นตอนที่ 2) รวมโมดูล Bluebird
ขั้นตอนต่อไปคือการรวมโมดูล bluebird ไว้ในโค้ดของคุณและรับประกันทั้งหมด MongoDB โมดูล. โดยสัญญาเราหมายความว่า bluebird จะรับรองว่าแต่ละวิธีที่กำหนดไว้ใน MongoDB ห้องสมุดคืนคำสัญญา
คำอธิบายรหัส:-
- คำสั่ง need ใช้เพื่อรวมไลบรารี Bluebird
- ใช้เมธอด .promisifyAll() ของ Bluebird เพื่อสร้างเวอร์ชันอะซิงค์ของทุกเมธอด MongoDB โมดูลให้ ซึ่งจะทำให้แต่ละวิธีของการ MongoDB โมดูลจะทำงานในพื้นหลังและตรวจสอบให้แน่ใจว่ามีการส่งคืนสัญญาสำหรับการเรียกใช้เมธอดแต่ละครั้งใน MongoDB ห้องสมุด.
ขั้นตอนที่ 3) เชื่อมต่อกับฐานข้อมูล
ขั้นตอนสุดท้ายคือการเชื่อมต่อกับฐานข้อมูลของเรา ดึงข้อมูลบันทึกทั้งหมดในคอลเลกชันของเรา และแสดงในบันทึกคอนโซลของเรา
คำอธิบายรหัส:-
- คุณจะสังเกตเห็นว่าเรากำลังใช้เมธอด “connectAsync” แทนวิธีการเชื่อมต่อปกติสำหรับการเชื่อมต่อกับ ฐานข้อมูล. จริงๆ แล้ว Bluebird เพิ่มคำสำคัญ Async ให้กับแต่ละวิธีใน MongoDB ไลบรารีเพื่อแยกแยะการเรียกที่ส่งคืนคำสัญญาและการไม่ส่งคืน ดังนั้นจึงไม่มีการรับประกันว่าวิธีการที่ไม่มีคำ Async จะส่งคืนค่า
- คล้ายกับวิธี connectAsync ตอนนี้เรากำลังใช้เมธอด findAsync เพื่อส่งคืนระเบียนทั้งหมดในคอลเล็กชัน 'Employee' ของ mongoDB
- ในที่สุด หาก findAsync ส่งกลับคำสัญญาที่ประสบความสำเร็จ เราจะกำหนดบล็อกของโค้ดเพื่อวนซ้ำผ่านแต่ละรายการในคอลเลกชัน และแสดงไว้ในบันทึกคอนโซล
หากดำเนินการตามขั้นตอนข้างต้นอย่างถูกต้อง เอกสารทั้งหมดในคอลเลคชันพนักงานจะปรากฏในคอนโซลตามที่แสดงในผลลัพธ์ด้านล่าง
นี่คือรหัสสำหรับการอ้างอิงของคุณ:
var Promise = require('bluebird'); var mongoClient = Promise.promisifyAll(require('mongodb')).MongoClient; var url = 'mongodb://localhost/EmployeeDB'; mongoClient.connectAsync('mongodb://localhost/EmployeeDB') .then(function(db) { return db.collection('Employee').findAsync({}) }) .then(function(cursor) { cursor.each(function(err, doc) { console.log(doc); }) });