Waiting for all conditions
-
Several conditions must be met
End of general timer (_TimeOver);
End of current timer (_CurrentTimer);
AudioInstructionEnd.
Event 1 can be captured through a deferred object. And with events two and three, there are problems - every push on the button is updating their condition. The logic for these two events, I understand, is unlikely to be different.
It's gonna be like,
$.when(_TimeOver, _CurrentTimer, _AudioInstructionEnd).then(Finish); //когда выполнены все условия запустить функцию финиш
-
$(function(){ // В Deferred-объектах делаем что-то, при завершении, вызываем resolve для изменения состояния // В примерах это просто таймеры let _TimeOver = $.Deferred(obj => { setTimeout(() => obj.resolve(), 1500); }); let _CurrentTimer = $.Deferred(obj => { setTimeout(() => obj.resolve(), 1700); }); let _AudioInstructionEnd = $.Deferred(obj => { setTimeout(() => obj.resolve(), 2000); });
// Собираем все Deffered-объекты в один и когда он успешно разрешится, выполнится done, иначе - fail
$.when(_TimeOver, _CurrentTimer, _AudioInstructionEnd).done(r => console.info('Ho-ho-ho!')).fail(e => console.info(':('));
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>