我创建了一个函数verifyIfUserIsInGame(userId)
,它允许检查作为参数给出的用户是否在游戏中。此函数搜索Firebase数据库并返回true或false。 (所以这是函数中的承诺)。
我想现在想检查,一旦为2个用户执行了该功能,如果他们在游戏中。
我对承诺不太满意。我制作了这段代码,但由于我在控制台日志中得到[object Promise]
,因此无法正常工作。
// We check that both users are in this game
user1IsInGame = verifyIfUserIsInGame(user1Id); // must return true or false
user2IsInGame = verifyIfUserIsInGame(user2Id); // must return true or false
console.log("user1: " + user1IsInGame);
console.log("user2: " + user2IsInGame);
if (userIsInGame && user2IsInGame) {
// The users are in game
} else {
// The users are not in game
}
});
感谢您的帮助。
答案 0 :(得分:3)
您可以使用async
和await
来实现异步。
async function verifyIfUserIsInGame() {
//the content of your function
return true;
}
async function func() {
// We check that both users are in this game
const user1IsInGame = await verifyIfUserIsInGame(user1Id); // must return true or false
const user2IsInGame = await verifyIfUserIsInGame(user2Id); // must return true or false
console.log("user1: " + user1IsInGame);
console.log("user2: " + user2IsInGame);
if (userIsInGame && userToKillIsInGame) {
// The users are in game
} else {
// The users are not in game
}
}

答案 1 :(得分:1)
如前所述,您可以使用Promise.all
,但其他答案都没有验证功能中的任何内容,所以只想提供一个完整的示例。
这是一种方法,您可以将解决方案更改为仅传递true / false,然后更改if语句。
function verifyIfUserIsInGame(user_id) {
return new Promise((resolve, reject) => {
resolve({ id: user_id, inGame: true });
});
}
// run this when all checks have been performed.
function callbackFunction(players){
let playersReady = 0;
players.forEach(player => {
if(player.inGame){
console.log(`player ${player.id} are in the game`);
playersReady++;
}
});
if(playersReady === players.length){
console.log("All players are in the game");
}
}
// the checks we want to perform
const verifyAllUsers = [
verifyIfUserIsInGame(1),
verifyIfUserIsInGame(2)
];
// wait for promises to finish.
Promise.all(verifyAllUsers)
.then( users => callbackFunction(users) )
.catch( err => console.error(err) );
答案 2 :(得分:0)
承诺可能只是await
吗? :
(async function() {
const user1IsInGame = await verifyIfUserIsInGame(user1Id); // must return true or false
const user2IsInGame = await verifyIfUserIsInGame(user2Id); // must return true or false
console.log("user1: " + user1IsInGame);
console.log("user2: " + user2IsInGame);
if (userIsInGame && userToKillIsInGame) {
// The users are in game
} else {
// The users are not in game
}
})()
答案 3 :(得分:0)
如果要同时运行两个函数,可以使用Promise.all:
(async function() {
const usersAreInGame = await Promise.all(verifyIfUserIsInGame(user1Id),
verifyIfUserIsInGame(user2Id));
if (usersAreInGame[0] && usersAreInGame[1]) {
// The users are in game
} else {
// The users are not in game
}
})()