Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2021, 09:52
Новичок на форуме
Отправить личное сообщение для MiavchikM Посмотреть профиль Найти все сообщения от MiavchikM
 
Регистрация: 04.12.2021
Сообщений: 1

Как остановить выполнение функции до нажатия кнопки?
На сайте есть обычная кнопка <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();
}
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2021, 10:30
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,103

Вполне себе работает(чуть поправил, но принципа это не меняет):
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();
}
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2021, 11:24
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,670

Но второй раз это уже не сработает.
Промис уже будет в разрешенном состоянии
Лучше так.
function doSomething(){
  doSomeStuff();
  const waitClick = () => {
     doSomeStuffAfter();
     document.getElementById('button-1').removeEventListener('click', waitClick)
  }

  document.getElementById('button-1').addEventListener('click', waitClick)
}
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2021, 14:26
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,103

voraa, всмысле? function2 при вызове создаёт новый промис...
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 04.12.2021, 14:53
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,670

Сообщение от Aetae
всмысле? function2 при вызове создаёт новый промис...
Ну да.
Но я не сторонник вешать промисы на такие события.
Промис все-таки должен когда то разрешиться
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как зафиксировать кнопки чтобы они оставались на одном месте? mikefromru Элементы интерфейса 5 14.06.2017 23:15
Как предотвратить выполнение функции для обертки? borus Events/DOM/Window 8 03.06.2017 10:37
Как переменую из одной функции, присвоить к другой функции? Terminator004 Общие вопросы Javascript 5 31.05.2017 16:40
Как включить синхронное выполнение строк? SkaN Элементы интерфейса 1 26.04.2012 21:28
Как остановить выполнение скрипта? ichisen Events/DOM/Window 2 12.04.2012 13:21