В моей реализации компонента функция doSomething запускается нажатием кнопки пользователя. Проблема в том, что doSomething занимает около 200-1100 мсек для завершения выполнения с изменением состояния. Я сталкиваюсь с проблемой, когда быстрое нажатие кнопки одновременно вызывает это тело функции, что вызывает неожиданные конечные состояния.
I не требует сложного решения взаимного исключения . Требование состоит в том, чтобы просто игнорировать все другие вызовы, пока текущее выполнение не завершится, я попробовал следующий подход пометки:
doSomething = () => {
if(this.running){
return //ignore the event
}
this.running=true;
//do processing
this.setState({someVariable:answer_of_process}, ()=>this.running=false);
}
render(){
return(<ImportedComponent doSomething={this.doSomething}/>)
}
Это уменьшило вероятность повреждения состояния, но иногда это происходит. ie: до 20%, сейчас 2% . Как улучшить это решение, чтобы оно составляло 0% от частоты отказов?
Отредактировано: Кнопка запуска функции создана из импортированного сложного компонента и не может быть отключена. Компонент принимает doSomething в качестве реквизита.