NEDB NodeJS 查找文档并等待结果
Posted
技术标签:
【中文标题】NEDB NodeJS 查找文档并等待结果【英文标题】:NEDB NodeJS find document and wait for the result 【发布时间】:2021-02-27 13:08:13 【问题描述】:我正在使用 NEDB 作为 NodeJS 应用程序中的一些本地存储。因此,我的 main.js 中确实需要一个处理程序脚本“nedbhandler.js”。
var NEDB = require('./nedbhandler.js');
async function test()
var value = await NEDB.getValue_byID(1);
console.log(value)
test()
在 nedbhandler.js 中,我的查询是这样处理的:
async function getValue_byID(id)
db.config.findOne( _id: id , function (err, doc)
callback(doc);
);
function callback(doc)
console.log(doc)
return doc;
exports.getValue_byID = getValue_byID;
虽然来自 nedbhandler.js 的控制台记录了预期值,但 main.js 仍然未定义。
在 main.js 中加载下一个函数之前加载所有配置查询的最佳做法是什么?
【问题讨论】:
这能回答你的问题吗? How do I return the response from an asynchronous call? 嗨,不,不幸的是。我复制并粘贴了章节:ES2017+:Promises with async/await in my main.js 但它仍然返回 undefined。 请向我们展示您更新后的代码。getalueById
中的回调以非阻塞模式(异步)发生。因此,当您使用await
调用getValueById
函数时。它将简单地从函数返回 undefined,因为它不会再次等待 db.config.findOne
非阻塞。要么等待findone
完成,要么尝试显式返回promise 并在找到值时解决它。
【参考方案1】:
您希望您的 getValue_byID
函数返回一个承诺
function getValue_byID(id)
return new Promise((resolve, reject) =>
db.config.findOne( _id: id , (err, doc) =>
err ? reject(err) : resolve(doc);
);
);
请注意我如何将 function
关键字更改为更现代的 =>
语法。
使用const
和let
而不是var
也被认为是更好的做法
nedb 有一个封装模块,名为NeDB-promises。它或多或少地完成了我在这里所做的工作,因此您可以使用 async/await 代替回调。
【讨论】:
以上是关于NEDB NodeJS 查找文档并等待结果的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS 等待 axios+nedb 函数 async/await 运行下一个查询