Console Uncaught (in promise) DOMException: The play() request was interrupted by a new load request.
HTML5 audio / video 在 Audio / Video 元素调用play()以后并不是直接就播放音乐或视频,而是等待加载到可以开始播放时才正式播放,video / audio.play()返回一个Promise对象,而不是true或false. 使用try{}catch(x){}finally{}不能捕获Promise中抛出的异常,因为加载资源的过程是异步进行的。Promise中文意思是“承诺”,所谓的承诺,有可能实现,也有可能无法实现,所以Promise对象只是一个代理对象,他代理的值是不确定的。Promise拥有以下方法
- Promise.all()
- Promise.prototype.catch()
- Promise.prototype.then()
- Promise.race()
- Promise.reject()
- Promise.resolve()
Promise.prototype.catch()和Promise.prototype.then()返回Promise对象, 可以链式调用。
想要catch(捕获)Promise中抛出的异常,可以使用Promise.prototype.catch()来实现。示例代码如下。- // ...... 其他代码省略 ...
- // oAudioWuXiancheng是一个audio元素对象
- var promise = oAudioWuXiancheng . play();
- promise && promise.catch(function(reason){
- console.log(reason);
- });
- // ... 其他代码省略 ...
复制代码 |
|