Используйте Promises и async / await, чтобы достичь этого очень просто
var bgtInterval = [0, false, 50];
// Fade functions will change fill following brightStep array values.
function fadeOut(){
// return the Promise
return new Promise(resolve => {
let i = 11;
OBJECT.setAttribute("fill", brightSteps[i]);
bgtInterval[1]=true;
bgtInterval[0] = setInterval(function(){
FULLCLOCK.setAttribute("fill", brightSteps[i]);
if (i<=0){
clearInterval(bgtInterval[0]);
bgtInterval[1]=false;
// resolve when done
resolve();
}
i--;
}, bgtInterval[2]);
});
}
function fadeIn(){
// return a Promise
return new Promise(resolve => {
let i = 0;
OBJECT.setAttribute("fill", brightSteps[i]);
bgtInterval[1]=true;
bgtInterval[0] = setInterval(function(){
FULLCLOCK.setAttribute("fill", brightSteps[i]);
if (i>=11){
clearInterval(bgtInterval[0]);
bgtInterval[1]=false;
// resolve when done
resolve();
}
i++;
}, bgtInterval[2]);
});
}
// use async so we can await a Promise
async function resetSettings(id){
// wait for fadeOut to finish
await fadeOut();
displayReset();
displayShow();
await fadeIn();
}
//THE MAIN FUNCTION//
// as we are in global scope, you can't use `async` ... so use Promise.then instead
resetSettings().then(moreFunctionsHere);
Вы увидите, что я использую .then в последней строке, потому что в глобальном масштабе вы не можете использовать await
Вы можете, однако, сделать что-то вроде
(async () => {
await resetSettings();
moreFunctionsHere();
})();
асинхронный IIFE, чтобы вы могли ждать