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 关键字更改为更现代的 => 语法。 使用constlet 而不是var 也被认为是更好的做法

nedb 有一个封装模块,名为NeDB-promises。它或多或少地完成了我在这里所做的工作,因此您可以使用 async/await 代替回调。

【讨论】:

以上是关于NEDB NodeJS 查找文档并等待结果的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 等待 axios+nedb 函数 async/await 运行下一个查询

NodeJS nedb 函数不等待

nedb:如何从 find() 函数中获取文档?

Nedb 查找一项并更改另一项

如何使用 NodeJS 仅将 NeDB 数据库中的某些字段存储到数组中

NEDB & Nodejs:使用用户输入在 home.db 中搜索特定记录 - 无法将参数传递给 index.js