如果我尝试播放一个不存在的音频文件(例如,该文件尚未下载),如下所示:
audio_object = new Audio("Non_Existing_Audio_File.mp3");
audio_object.play();
我得到:
Uncaught (in promise) DOMException: The media resource indicated by the src attribute or assigned media provider object was not suitable.
很好,但是我怎样才能发现这个错误呢?如果我尝试/捕获,会发生以下情况:
function playAudioWithTryCatch() {
try {
audio_object.play();
//Result: Uncaught (in promise) DOMException: The media resource indicated by the src attribute or assigned media provider object was not suitable.
} catch (error) {
// We never get here:
console.error("Audio play failed",error);
}
}
因此,使用 try/catch 我永远不会到达 catch 块,只有在调用 play 方法时出现相同的未处理错误消息。
如果我尝试使用 Promise,我会得到:
function playAudioWithPromise(){
let myPromise = new Promise(function(resolve, reject) {
if (E2.play()) {
resolve("OK");
} else {
reject("Error");
}
});
myPromise.then(
result => console.log(result),
error => console.log(error)
);
//Result: Uncaught (in promise) DOMException: The media resource indicated by the src attribute or assigned media provider object was not suitable.
//And "OK" (console log)
}
同样,错误没有被捕获,类似于上面。
谁能告诉我如何在此错误输出到控制台之前捕获/处理此错误?
我知道我可以使用 mediareadyState
属性,但这在这种情况下无济于事,因为我正在尝试解决一个 Safari 问题,即在用户启动每个音频文件播放方法之前,readyState 不会显示就绪,这是不切实际的,所以我不能在这里使用它。
任何帮助表示赞赏!