Как выполнить функцию после завершения изменения хука состояния?

Когда мы вызываем setState в классе, то можем передать колбек в последний аргумент, и колбек выполнится сразу после завершения изменения.

this.setState({}, () => { выполнится по завершении изменения })

Пример кода:

const foo = () => {
   setOpen(false);
   bar(); // эта функция должна быть выполнена сразу после setOpen, но setOpen - асинхронная функция
}

Вопрос: Как выполнить bar() сразу после завершения обновления хука через setOpen именно с аргументом false?


Ответы (1 шт):

Автор решения: santavital

Асинхронная функция возвращает Promise, чтобы выполнить что-либо сразу после выполнения promise нужно воспользоваться следующей конструкцией:

setOpen(false)
  .then(
    result => {
      // первая функция-обработчик - запустится при успешном завершении (resolve)
      // alert("setOpen resolve() return " + result);
      bar();
    },
    error => {
      // вторая функция - запустится при ошибке (reject)
      // alert("setOpen reject() return " + error); // error - аргумент reject
    }
  );
→ Ссылка