栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Node.js,Mongo查找并返回数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Node.js,Mongo查找并返回数据

如另一个答案所述,该代码是异步的,您不能简单地在回调链(嵌套函数)中返回想要的值。您需要公开一些接口,以便在您拥有所需的值(因此,将其回调或回调)后用信号通知调用代码。

在另一个答案中提供了一个回调示例,但是肯定有一个替代选项值得探讨:promises。

该模块将返回一个可以输入两种状态的已实现(已实现或已拒绝),而不是您使用所需结果调用的回调函数。调用代码等待承诺进入这两种状态之一,当它执行时将调用适当的函数。模块通过

resolve
ing或
reject
ing
触发状态更改。无论如何,这是一个使用promise的例子:

db1.js:

// db1.jsvar MongoClient = require('mongodb').MongoClient;var Promise = require('rsvp').Promise;module.exports = {  FindinCol1: function() {    return new Promise(function(resolve, reject) {      MongoClient.connect('mongodb://localhost:27017/db1', function(err, db) {        if (err) {          reject(err);        } else {          resolve(db);        }      }    }).then(function(db) {      return new Promise(function(resolve, reject) {        var collection = db.collection('col1');        collection.find().toArray(function(err, items) {          if (err) { reject(err);          } else { console.log(items); resolve(items);          }        });      });    });  }};// app.jsvar db = require('./db1');db.FindinCol1().then(function(items) {  console.info('The promise was fulfilled with items!', items);}, function(err) {  console.error('The promise was rejected', err, err.stack);});

现在,更多的最新版本的node.js
mongodb驱动程序具有对Promise的本地支持,您无需做任何工作即可将回调包装在上述Promise中。如果您使用的是最新驱动程序,那么这是一个更好的示例:

// db1.jsvar MongoClient = require('mongodb').MongoClient;module.exports = {  FindinCol1: function() {    return MongoClient.connect('mongodb://localhost:27017/db1').then(function(db) {      var collection = db.collection('col1');      return collection.find().toArray();    }).then(function(items) {      console.log(items);      return items;    });  }};// app.jsvar db = require('./db1');db.FindinCol1().then(function(items) {  console.info('The promise was fulfilled with items!', items);}, function(err) {  console.error('The promise was rejected', err, err.stack);});

Promise为异步控制流提供了一种极好的方法,我强烈建议您花一些时间来熟悉它们。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484713.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号