nedb:如何从 find() 函数中获取文档?
Posted
技术标签:
【中文标题】nedb:如何从 find() 函数中获取文档?【英文标题】:nedb: how to get docs out of find() function? 【发布时间】: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”呢?
【问题讨论】:
【参考方案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,它包括对承诺和事件的内置支持等便利功能
【讨论】:
以上是关于nedb:如何从 find() 函数中获取文档?的主要内容,如果未能解决你的问题,请参考以下文章
如何对 NeDB 数据库进行排序以获取响应? (Javascript 回调/箭头函数语法混乱)