[英]How to wait for promises to be resolved
我創建了一個函數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
}
});
謝謝你的幫助。
您可以使用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 } }
如前所述,您可以使用Promise.all
,但是其他所有答案在您的verify函數中都沒有任何內容,因此只想提供一個完整的示例。
這是一種實現方式,您可以更改解析以僅將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) );
只是在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
}
})()
如果要同時運行兩個功能,可以使用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
}
})()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.