【问题标题】:function returns a pending Promise instead of a boolean函数返回待处理的 Promise 而不是布尔值
【发布时间】:2021-02-20 02:50:27
【问题描述】:

我有这两个函数,我希望 alreadyInGame 返回一个布尔值,但返回一个 Pending 承诺,如果我在异步代码上使用 await,为什么它是一个 async 函数

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;
}

【问题讨论】:

  • 作为async 函数意味着它确实返回了一个promise,因为它执行异步操作。使用 await 不会使任何东西同步。

标签: javascript node.js mongoose async-await


【解决方案1】:

alreadyInGameasycn函数,需要await就可以了:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 2020-01-21
    • 1970-01-01
    • 2021-09-11
    • 2018-05-16
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多