Bluebird 承諾
Bluebird 是一個功能齊全的 JavaScript Promise 庫。Bluebird 最強大的功能是它允許你 promisify
其他 Node 模組,以便非同步使用它們。Promisify 是一個應用於回撥函式的概念。此概念用於確保呼叫的每個回撥函式都返回某種值。
因此,如果 Node.js 模組包含不返回值的回撥函式,如果我們 Promisify 節點模組,那麼特定節點模組中的所有函式都將自動修改以確保它返回一個值。
因此,你可以使用 BlueBird 使MongoDB模組非同步執行。這只是在編寫 Node.js 應用程式時增加了另一個簡便程度。
我們將看一個如何使用 bluebird 模組的示例。
我們的示例將首先建立與 EmployeeDB
資料庫中 Employee 集合
的連線。如果建立了 then
連線,那麼它將獲得集合中的所有記錄並相應地在控制檯中顯示它們。
使用 BlueBird 庫生成 promise
步驟 1: 安裝 NPM 模組
要在 Node 應用程式中使用 Bluebird,需要 Bluebird 模組。要安裝 Bluebird 模組,請執行以下命令
npm install bluebird
步驟 2: 下一步是在程式碼中包含 bluebird 模組並宣傳整個 MongoDB 模組。通過 promisify,我們的意思是 bluebird 將確保 MongoDB 庫中定義的每個方法都返回一個 promise。
var Promise= require('bluebird');
var mongoclient = Promise.promisifyAll(require('mongodb')).Mongoclient;
var url = 'mongodb://localhost/EmployeeDB';
程式碼說明: -
require
命令用於包含 Bluebird 庫。- 使用 Bluebird 的
.promisifyAll()
方法為 MongoDB 模組提供的每個方法建立非同步版本。這確保了 MongoDB 模組的每個方法都將在後臺執行,並確保為 MongoDB 庫中的每個方法呼叫返回一個 promise。
步驟 3: 最後一步是連線到我們的資料庫,檢索我們集合中的所有記錄並在我們的控制檯日誌中顯示它們。
mongoclient.connectAsync('mongodb://localhost/EmployeeDB'),
.then(function (db) {
return db.collection ('Employee').findAsync({});
})
.then (function (cursor)
{ cursor.each(function (err, doc) {
console.log (doc);
})
});
程式碼說明: -
- 你會注意到我們使用
connectAsync
方法而不是通常的連線方法來連線資料庫。Bluebird 實際上將 Async 關鍵字新增到 MongoDB 庫中的每個方法,以區分那些返回 promises 的呼叫和不返回 promises 的呼叫。因此,無法保證沒有 Async 字的方法將返回值。 - 與 connectAsync 方法類似,我們現在使用 findAsync 方法返回 MongoDB
Employee
集合中的所有記錄。 - 最後,如果 findAsync 返回成功的 promise,那麼我們定義一個程式碼塊來迭代集合中的每個記錄並在控制檯日誌中顯示它們。
如果正確執行了上述步驟,則 Employee 集合中的所有文件都將顯示在控制檯中,如下面的輸出所示。
{ id: 567adf6b341785002 88e69ca,
Employeeid: 1,
EmployeeName: 'Tastones' }
{ id: 567adf7934178500288e69cb,
Employeeid: 2,
EmployeeName: 'Joe' }
{ id: 567adf8234178500288e69cc,
Employeeid: 3,
EmployeeName: 'Martin' }
以下是供你參考的程式碼
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);
})
});