Как остановить выполнение функции до нажатия кнопки?
На сайте есть обычная кнопка <button>. Я хочу, чтобы до нажатия кнопки выполнение функции остановилось, примерно так:
function doSomething(){
doSomeStuff();
//код, останавливающий выполнение до нажатия кнопки
doSomeStuffAfter();
}
Варианты с onclick мне не подходят, так как нужно продолжить выполнять код в этой же функции. Подозреваю, что промиcы могут помочь, но не знаю, как их правильно сделать, такой вариант не работает:
async function function2(){
return new Promise((resolve, reject) => {
document.getElementById('button-1').addEventListener('click', () => resolve())
})
}
async function function1(){
await function2();
}
|
Вполне себе работает(чуть поправил, но принципа это не меняет):
async function function2(id){
return new Promise((resolve) => document.getElementById(id).addEventListener('click', resolve, {once: true}))
}
async function doSomething(){
doSomeStuff();
await function2('button-1');
doSomeStuffAfter();
}
|
Но второй раз это уже не сработает.
Промис уже будет в разрешенном состоянии Лучше так.
function doSomething(){
doSomeStuff();
const waitClick = () => {
doSomeStuffAfter();
document.getElementById('button-1').removeEventListener('click', waitClick)
}
document.getElementById('button-1').addEventListener('click', waitClick)
}
|
voraa, всмысле? function2 при вызове создаёт новый промис...
|
Цитата:
Но я не сторонник вешать промисы на такие события. Промис все-таки должен когда то разрешиться |
| Часовой пояс GMT +3, время: 12:15. |