#javascript #audio #promise #html5-audio #playback
#javascript #Аудио #обещание #html5-аудио #воспроизведение
Вопрос:
У меня есть ситуация, требующая вызова pause (), когда обещание, возвращенное play (), еще не решено. При вызове pause() Я получаю сообщение об ошибке AbortError
из браузера. В моем случае эта ошибка обрабатывается обычным обработчиком ошибок, который, в свою очередь, отображает ее в пользовательском интерфейсе, который не выглядит приятным для пользователя.
Аналогичный код сокращен:
errorHandler = function(){} //Error handler showing error in UI.
var audio_el = document.body.appendChild(document.createElement("audio")
PlayMedia(newSrc) {
audio_el.src = newSrc;
try {
var playPromise = audio_el.play();
Promise.resolve(playPromise).catch(errorHandler)
} catch(err) {
errorHandler(err);
}
}
StopMedia() {
if (audio) {
audio_el.pause();
audio_el.currentTime = 0;
}
}
Я должен вызвать StopMedia()
непосредственно перед вызовом PlayMedia()
с тем же или другим src. Поскольку audio_el.pause(
) или audio_el.src = newSrc
(изменение src
также вызывает внутренний триггер паузы) запускается, когда при переходе playPromise
не решается из-за этого браузер safari выдает ошибку AbortError: The operation was aborted.
Как я могу дождаться разрешения play () promise перед вызовом pause?? или как я могу избежать прерывания? Есть ли способ прервать воспроизведение, не вызывая исключения из браузера?
Примечание: многократный щелчок по элементу мультимедиа вызывает вызов двух вышеупомянутых функций.