Я намагався зв'язати дві функції асинхронізації разом, оскільки перша мала умовний параметр повернення, що призвів до того, що друга запустилася або вийшла з модуля. Однак я виявив дивну поведінку, якої не можу знайти в специфікаціях.
async function isInLobby() {
//promise.all([chained methods here])
let exit = false;
if (someCondition) exit = true;
}
Це негідний фрагмент мого коду (повний обсяг можна побачити тут ), який просто перевіряє, чи гравець вже є у фойє, але це не має значення.
Далі ми маємо цю функцію асинхронізації.
async function countPlayer() {
const keyLength = await scardAsync(game);
return keyLength;
}
Цю функцію не потрібно запускати, якщо exit === true.
Я намагався зробити
const inLobby = await isInLobby();
Я сподівався, що це буде чекати результатів, тому я можу використовувати inLobbyдля умовного запуску countPlayer, однак я отримав помилку типу без конкретних деталей.
Чому ви не можете функції поза області видимості функції? Я знаю, що це обіцянка про цукор, тому її потрібно прикувати, але чому я можу чекати чергової обіцянки, а зовні не можу ?awaitasyncthencountPlayerawait isInLobby
await isInLobby(), і якinLobbyце використовується? Крім того, де / якcountPlayerназивається?