Дождитесь разрешения HTMLMediaElement.play() promise перед вызовом pause()

#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?? или как я могу избежать прерывания? Есть ли способ прервать воспроизведение, не вызывая исключения из браузера?

Примечание: многократный щелчок по элементу мультимедиа вызывает вызов двух вышеупомянутых функций.