【问题标题】:nedb: how to get docs out of find() function?nedb:如何从 find() 函数中获取文档?
【发布时间】:2016-12-12 12:48:42
【问题描述】:

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

【问题讨论】:

    标签: node.js asynchronous callback nedb


    【解决方案1】:

    您需要一个回调函数来在数据准备好时检索数据,如下所示:

    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);
    });
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-09-10
        • 2020-05-31
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        • 2012-01-12
        • 2010-10-17
        • 2019-12-28
        • 2017-04-25
        相关资源
        最近更新 更多