Basi c ответ на ваш подход заключается в том, что Javascript является асинхронным по своей природе.
Чтобы гарантировать, что выполнение происходит синхронно, мы используем Promises
, как вы уже сделал в вашем текущем коде.
Вам просто нужно несколько настроек здесь.
Сначала вам нужно заставить свою функцию submitForm
вернуть Promise
let submitForm = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('waiting done');
}, 5000);
})
};
А затем вам нужно убедиться, что submitForm
завершает выполнение, прежде чем разрешить buttonClickHandler
функцию
const buttonClickHandler = (onClick) => {
return new Promise(async (resolve, reject) => {
console.log('inside promise');
isDisabled = true;
onClick().then((res)=>{
console.log(res)
return resolve(true);
});
});
};
PS: код всегда можно реорганизовать
- Избегайте использования зарезервированных ключевых слов, таких как
onClick
, в качестве имен пользовательских функций или переменных, это может привести к ошибкам. - Я рекомендую вам использовать
state
для управления loading
.