javascript - 函数返回待处理的 Promise 而不是布尔值
问题描述
我有这两个函数,我希望它alreadyInGame
返回一个布尔值,但返回一个 Pending 承诺,async
如果我await
在异步代码上使用它,为什么它是一个函数
lobby = async function(req,res){
var game_id = req.params.game_id;
var game = await Game.findById(game_id);
//console.log('already', !alreadyInGame(req.user._id, game_id, game.users));
var exists = alreadyInGame(req.user._id, game_id, game.users);
if( !exists){
console.log('already');
game.users.push({
user: req.user,
calification: 0
});
game.save();
}
res.render('game/lobby.twig', {
username: req.user.username
});
}
async function alreadyInGame(user_id, game_id ,users){
var result = await Game.findById(game_id).find({
users: {
$elemMatch: { user: user_id }
}
});
return result.length != 0;
}
解决方案
alreadyInGame
是一个asycn
函数,你需要await
在它上面:
var exists = await alreadyInGame(req.user._id, game_id, game.users);
推荐阅读
- go - 在 Go 中为 ID 使用新类型的包装器是惯用的吗?
- java - 从单个 Java 流中提取多个值
- python - 如何在 Windows 中将 python 3.7 更改为 3.6
- python - 通过 pymongo 从 mongodb 获取范围内的数据条目
- css - 计算 div 的高度并将该数字放在 ::after 伪元素内容中
- python - 将双引号写入 Csv Python CSV 模块时出错
- javascript - React/Firebase 用户注册承诺 - 无法在未安装的组件上调用 setState
- blueprism - 错误 - 突出显示结果 - 未找到匹配的窗口
- arduino - 如何通过 Arduino Mega 从 ESP 12S 获得 AT 响应?
- c++ - 如何对 unique_ptrs 列表进行排序?