Javascript 如何解决未捕获(承诺中)的DomeException错误?
我使用HTML中的两个视频标签来加载当前视频和下一个视频。当当前视频开始播放时,下一个视频将被隐藏并预加载。 当当前视频结束时,它将淡出,下一个视频将淡入。这两个视频标签将以奇偶方式工作,在更改视频源的同时播放即将播放的视频 问题 当用户连续单击以更改视频时,控制台返回一个未捕获的异常错误,它指向更改视频源的代码 该错误可能是由于视频源不断更改,因为在更改视频源之前,该源中已经播放了视频。 另一方面,每次单击都会创建一个视频播放承诺请求,该请求可能会因连续单击而中断,因为请求在解决之前被中断 我试图用空字符串清除这两个视频源,但仍然会生成错误Javascript 如何解决未捕获(承诺中)的DomeException错误?,javascript,jquery,promise,html5-video,es6-promise,Javascript,Jquery,Promise,Html5 Video,Es6 Promise,我使用HTML中的两个视频标签来加载当前视频和下一个视频。当当前视频开始播放时,下一个视频将被隐藏并预加载。 当当前视频结束时,它将淡出,下一个视频将淡入。这两个视频标签将以奇偶方式工作,在更改视频源的同时播放即将播放的视频 问题 当用户连续单击以更改视频时,控制台返回一个未捕获的异常错误,它指向更改视频源的代码 该错误可能是由于视频源不断更改,因为在更改视频源之前,该源中已经播放了视频。 另一方面,每次单击都会创建一个视频播放承诺请求,该请求可能会因连续单击而中断,因为请求在解决之前被中断 我
// video source is getting changed which interrupts the promise and the error pointer
oppositeVideoElement.pause();
$(oppositeVideoElement).fadeOut(800, function () {
$(oppositeVideoElement).attr('src', nextVideoSource); // line where error points
});
// Play promise code which gets interrupted before resolve
function playPromiseForMobileVideo(videoElement, videoAboutToPlay) {
var playPromise = videoElement.play();
if (playPromise !== undefined) {
console.log(playPromise);
playPromise.then(
function () {
if (currentDevice == 'mobile' && mobileFirstTime) {
videoElement.pause();
mobileFirstTime = false;
}
}).catch(function (e) {
if(cameFromNetwork) {
videoElement.load();
videoElement.play();
cameFromNetwork = false;
return;
}
videoElement.pause();
$(videoElement).attr('src', videoAboutToPlay);
videoElement.load();
videoElement.play();
console.log('catch video Element', videoElement);
});
}
}
预期结果:错误应该被删除,承诺应该被终止
实际结果:生成了阻止当前视频播放的错误。承诺是一种预期解决或拒绝的结构。当你处理承诺时,你必须同时处理这两者,也就是说,你必须为拒绝创建句柄,就像你必须为解决创建句柄一样 当作为承诺调用方法时,应该始终在末尾添加.catch,catch调用接受回调,该回调将错误作为参数传递 例如:
const method = () => {
return new Promise((resolve, reject) => {
reject(new Error({});
});
}
method.then(...).catch(e => console.err(e.message));
如果承诺失败,你必须抓住错误
如果使用async/await,则改用try/catch:
向承诺链添加捕获以捕获错误。@Jite我已经有了捕获块,但代码没有执行或输入捕获块。它只指向更改视频源的代码。
try {
await method();
} catch (e) {
console.error(e.message);
}