在JavaScript中使用嵌套等待

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


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充满了数据,并能够使用以下方式进行validation:

 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({}); 如果有一个疑问函数返回错误和结果的顺序。

我应该如何处理这个嵌套的等待声明。 (但是,似乎函数正在等待按预期等待)。

做这个,而不是

 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更有意义,除非它不能满足您的查询要求,并且asynchronous可能需要在括号之前的空格