在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可能需要在括号之前的空格