javascript - 在 JavaScript 中使用嵌套等待

标签 javascript node.js mongoose async-await

我正在使用 Mongoose 在 Nodejs 应用程序中使用 MongoDB 内存MongoDB 数据库 实现缓存。这里 Nodejs 8.9 与异步/等待支持一起使用。


let get_func = async(userId) => {

    let is_cached = await cache_user.findOne({ user_id: userId });

    if(!is_cached){
        console.log("NOT CACHIED");
        let is_dbuser = await db_user.find({});
        console.log(is_dbuser);

    } else {
        console.log("CACHED");
    }

    console.log("LEAVING get_func")
};

get_func(100);

这是输出:

NOT CACHIED
[]
LEAVING get_func

然而 db_user 充满了数据并且能够验证使用:

db_user.find({}, function(err, users) {
   if (err) throw err;
   console.log(users);
});

此外还检查了 let is_error, is_dbuser = await db_user.find({}); 是否怀疑函数会按该顺序返回错误和结果。

我应该如何处理这个嵌套的 await 语句。 (但是,功能似乎正在按预期等待第二次等待)。

最佳答案

改为这样做

let get_func = async (userId) => {

    let is_cached = await cache_user.findById(userId);

    if(!is_cached){
        console.log("NOT CACHIED");
        let is_dbuser = await db_user.find({});
        console.log(is_dbuser);

    } else {
        console.log("CACHED");
    }

    console.log("LEAVING get_func")
};

get_func(100);

请注意,使用 findById 更有意义,除非它不满足您的查询要求,而且异步可能需要括号前的空格

关于javascript - 在 JavaScript 中使用嵌套等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47268988/

相关文章:

javascript - 为什么没有调用 AJAX 函数并且在调用该函数时没有打印警报?

javascript - 单击按钮时执行ajax函数

node.js - 使用 semver 范围作为 npm 依赖项的 Git SSH URL

javascript - 什么是javascript正则表达式来验证字符串值数组

javascript - 抛出新错误 ('Mongoose is not connected' );

javascript - ASP.NET/JavaScript : How to open a link in a new web page set to a width 640px and height 480px?

javascript - Material UI Autocomplete - 禁用键盘输入(在移动设备上)

node.js - Meteor:无法运行新创建的应用程序 Win10 x64

javascript - 在 Gatsby 中设置环境变量

node.js - mongoDB 中的数组更新