我正在使用 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/