nedb:如何从find()函数中获取文档?

时间:2016-08-06 04:17:57

标签: node.js asynchronous callback nedb

我将nedb模块封装在自定义对象中:

var Record = function() {
  var Datastore = require('nedb');
  this.db = new Datastore({filename: 'record'});
  this.db.loadDatabase();
};

我想定义自己的函数来获取数据库中的所有对象:

Record.prototype.getItems = function() {
  var items = null;
  this.db.find({}, function(err, docs) {
    items = docs;
  });
  return items;
};

但是,变量“items”不能分配给变量“docs”,并且始终为“null”。我意识到这是由JavaScript的异步性引起的。
但是如何才能将变量“docs”输出?

2 个答案:

答案 0 :(得分:0)

您需要一个回调函数,可以在数据准备就绪时检索数据,如下所示:

Record.prototype.getItems = function(callback) {
    this.db.find({}, callback);
};

然后使用它:

const record = new Record();
record.getItems((err, docs) => {
    if (err) return handleError(err);
    console.log(docs);
});

答案 1 :(得分:0)

你可以使用 promises 和 async/await 语法来省略回调

Record.prototype.getItems = () => {
    return new Promise((resolve, reject) => {
        this.db.find({}, (err, doc) => {
            err ? reject(err) : resolve(doc);
        });
    });
}

然后像这样检索数据

async function whatever(){
    const data = await Record.getItems();
}

我还建议为 nedb 使用这个包装器模块,称为 NeDB-promises ,它包括方便的功能,例如对承诺和事件的内置支持