0

我将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”呢?

4

2 回答 2

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);
});
于 2016-09-25T06:21:14.920 回答
0

您可以使用 Promise 和 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,它包括方便的功能,例如对承诺和事件的内置支持

于 2021-03-15T17:31:20.917 回答