Próbowałem połączyć ze sobą dwie asynchroniczne funkcje, ponieważ pierwsza miała warunkowy parametr powrotu, który spowodował, że drugi uruchomił się lub zakończył działanie modułu. Jednak znalazłem dziwne zachowanie, którego nie mogę znaleźć w specyfikacjach.Korzystanie z funkcji czekającej poza funkcją asynchroniczną
async function isInLobby() {
//promise.all([chained methods here])
let exit = false;
if (someCondition) exit = true;
}
To bastardized fragment mojego kodu (widać pełny zakres here), że po prostu sprawdza, czy gracz, jeśli już w holu, ale to bez znaczenia.
Następnie mamy tę funkcję asynchroniczną.
async function countPlayer() {
const keyLength = await scardAsync(game);
return keyLength;
}
Ta funkcja nie musi działać, jeśli exit === true
.
Próbowałem zrobić
const inLobby = await isInLobby();
ten miałem nadzieję, że czekają na wyniki, więc mogę używać inLobby
warunkowo uruchomić countPlayer
jednak otrzymałem TypeError bez szczegółów.
Dlaczego nie możesz await
funkcji async
poza zakresem funkcji? Wiem, że to obietnica cukru, więc musi być przykuta do then
, ale dlaczego w countPlayer
mogę czekać na kolejną obietnicę, ale na zewnątrz, nie mogę await
isInLobby
?
Czy możesz nam pokazać * gdzie * czekałeś 'isInLobby()' i jak użyto 'inLobby'? Ponadto, gdzie/jak wywoływany jest 'countPlayer'? – Bergi
@Bergi Połączyłem moje repozytorium z rzeczywistym kontekstem. Za dużo kodu, aby umieścić w pytaniu –
Nie widzę, gdzie jest z tym problem (może już zaktualizowałeś repozytorium)? Jeśli odwołasz się do opcji 'isInLobby(). Then (... countPlayer(). Then ...', rozwiązanie jest trywialne: po prostu wykonaj funkcję, w której te połączenia są zawarte ('(req, res) =>) 'async'. – Bergi