Звучит так, как будто text
вставляется в DOM, и пользователь должен ввести еще один ввод, прежде чем лог c продолжится. Этот ввод дополнительных значений является асинхронным. Самый простой способ express цепочки асинхронного потока кода - с помощью async
/ await
: вы можете создать функцию, которая возвращает Promise, который разрешается, когда пользователь нажимает кнопку. Всякий раз, когда вы хотите реализовать logi c для запроса пользователя, вызывайте его и await
Обещание.
switch
довольно уродливо и многословно, рассмотрите возможность использования обычных операторов if
/ else
.
Также рассмотрите возможность ввода текста в нижнем регистре, для пользователя это будет немного проще.
Было бы также хорошо избегать встроенных обработчиков , они слишком много проблем Присоедините слушателя, используя Javascript.
const button = document.querySelector('button');
const input = document.querySelector('input');
const nextInput = () => new Promise((resolve) => {
button.onclick = () => {
resolve(input.value.toLowerCase());
};
});
const summary = document.querySelector('div');
const display = text => summary.innerHTML = text;
const main = async () => {
const textInput = await nextInput();
if (textInput === 'help1') {
display("[Page 1 of 2. Type 'Help2' for page 2] Commands you can use: <ul><li>South</li><li>North</li><li>East</li><li>West</li><li>North Again</li><li>South again</li>");
} else if (textInput === 'help2') {
display("[Page 2 of 2] Commands you can use: <li>North One More</li><li>East Once More</li><li>West Once More</li><li>South Once More</li><li>East Again</li><li>West Again</li>");
} else if (textInput === 'south') {
display("You went to the city; street 2. Do you want to explore?");
const exploring = await nextInput();
if (exploring === 'yes') {
display('Exploring');
} else {
display('Not exploring');
}
}
// go back to beginning state
main();
};
main();
<input type="text" placeholder="Type 'Help1' for actions">
<button>Confirm</button>
<div></div>