【发布时间】:2018-04-26 09:50:47
【问题描述】:
我正在使用 mongoose 在 Nodejs 应用程序中使用 MongoDB in-memory 和 MongoDB 数据库 实现缓存。这里 Nodejs 8.9 与 async/await 支持一起使用。
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({}); 核对。
我应该如何处理这个嵌套的等待语句。 (但似乎函数正在等待第二次等待)。
【问题讨论】:
-
let is_error, is_dbuser = await db_user.find({});不会工作。如果 promise 被拒绝,await 会像 throw -
是的,似乎兑现了承诺。与您的其他月光查询一起正常工作。只有内部等待有问题。
-
我似乎记得,为了在 Mongoose 中获得成熟的承诺,您需要
exec()。你试过吗:b_user.find({}).exec()? -
@Mark_M 是的...尝试使用
exec()但同样的结果来了!
标签: javascript node.js mongoose async-await