Использование setTimeout
не нужно заключать в обещание, вам просто нужно сделать так, чтобы следующий вызов воспроизведения срабатывал в обратном вызове setTimeout
. Я бы предложил сделать это с помощью рекурсивной функции:
function playSound(audio, numberOfTimes = 1, delay = 3000, firstTime = true ){
if(firstTime){
audio.play();
}
setTimeout( () => {
if(!firstTime){
audio.play();
}
numberOfTimes--;
if(numberOfTimes > 0){
playSound(audio,numberOfTimes,delay, false);
}
}, delay)
}
function playTRexRoar() {
var audio = new Audio('https://interactive-examples.mdn.mozilla.net/media/examples/t-rex-roar.mp3');
playSound(audio,3,3000);
}
playTRexRoar();
(Редактировать: добавлена проверка, воспроизводится ли клип в первый раз, чтобы он мог воспроизводиться немедленно, а не в ожидании задержка)