Многократный вызов функции при нажатии кнопки синхронно с asyn c - ожидание не работает - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь выяснить, как вызвать несколько методов с помощью нажатия одной кнопки синхронно. Моя первая функция - это вызов AJAX. Так что это естественно не синхронно. Чтобы решить эту проблему, я использовал asyn c -await. Asyn c -await ожидает внутри той же функции, но не для других вызываемых функций.

Я использую Stimulus. js для создания классов, но мне достаточно общего ответа: https://stimulusjs.org/

Вот так выглядит мой код:

Кнопка: onClick:

classA#methodA classB#methodB

в классе A

async methodA(event){
  const response = await axios.post('/url', { data }, options);
  const data = await response.json();
  doSomething()
}

в классе B

methodB(){
  updateThings()
}

Так что я хочу добиться, чтобы classA#methodA classB#methodB был вызван синхронно. Но methodA не ожидает methodB, хотя methodA не конкурирует. И даже когда я использую asyn c await для метода A.

Есть идеи, как мне решить эту проблему?

Создание метода-обертки и его вызов не представляется возможным из-за как работает Стимул. js.

1 Ответ

1 голос
/ 22 апреля 2020

При нажатии кнопки у вас должно быть что-то вроде этого:

async () => {
    await methodA();
    await methodB();
}

А также оба метода должны иметь отметку async:

async methodA(event){
  const response = await axios.post('/url', { data }, options);
  const data = await response.json();
  doSomething()
}

async methodB(){
  updateThings()
}

как ваш методA isyn c, основной вызов этого метода по умолчанию не будет ждать его окончания sh перед выполнением следующих строк. Так что вы должны явно сказать await methodA().

Проверьте это: Понимание асин c ждите в javascript

...