Предполагается, что вы говорите о HTMLAudioElement и интерфейсе этого ...
Свойство .error
совсем не то, что вам нужно. Это не обработчик событий, это свойство, которое вы прочитали, поэтому присвоение reject
ничего не даст.
HTMLAudioElement
наследует большинство своих свойств от HTMLMediaElement
, которые показывает, что вы должны использовать подобные события error
и ended
. Запустите фрагмент кода, затем нажмите кнопку воспроизведения, чтобы увидеть, как он работает.
function playSound(url) {
return new Promise(function(resolve, reject) {
var audio = new Audio();
audio.prelopad = "auto";
audio.autoplay = true;
audio.addEventListener("error", reject);
audio.addEventListener("ended", resolve);
audio.src = url;
audio.play();
});
}
var button = document.getElementById("play");
button.addEventListener("click", function() {
var url = 'http://techslides.com/demos/samples/sample.mp3';
playSound(url).then(function(response) {
log("Promise resolved. Sound played Successfully.");
}, function(error) {
log("Promise rejected. Sound Failed.");
});
});
function log(x) {
let logger = document.getElementById("log");
let div = document.createElement("div");
div.innerHTML = x;
logger.appendChild(div);
}
<div>
Press the Play button to start the audio<br><br>
<button id="play">
Play
</button>
</div>
<div id="log" style="margin-top: 20px;">
</div>