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'; 

代码说明: -

  1. require 命令用于包含 Bluebird 库。
  2. 使用 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); 
           })
    });

代码说明: -

  1. 你会注意到我们使用 connectAsync 方法而不是通常的连接方法来连接数据库。Bluebird 实际上将 Async 关键字添加到 MongoDB 库中的每个方法,以区分那些返回 promises 的调用和不返回 promises 的调用。因此,无法保证没有 Async 字的方法将返回值。
  2. 与 connectAsync 方法类似,我们现在使用 findAsync 方法返回 MongoDBEmployee 集合中的所有记录。
  3. 最后,如果 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);
        })
    });