首页 > 解决方案 > 函数返回待处理的 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;
}

标签: javascriptnode.jsmongooseasync-await

解决方案


alreadyInGame是一个asycn函数,你需要await在它上面:

var exists = await alreadyInGame(req.user._id, game_id, game.users); 

推荐阅读