我将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”输出?
答案 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 ,它包括方便的功能,例如对承诺和事件的内置支持