JS 浏览器:检查 getUserMedia() 产生的错误是否是 DOMException 错误对象
JS browser: check if error generated by getUserMedia() is a DOMException error object
我想知道以下承诺链中的错误是由于 getUserMedia() 函数还是由于 webRTC 函数而产生的。
Firefox documentation 说:通过将 DOMException 错误对象传递给承诺的失败处理程序来拒绝返回的承诺。那么,在 chrome 和 firefox 中,我如何知道我得到的错误对象是否是 DOMException 错误对象?
function handleVideoOfferMsg(msg) {
var localStream = null;
targetUsername = msg.name;
createPeerConnection();
var desc = new RTCSessionDescription(msg.sdp);
myPeerConnection.setRemoteDescription(desc).then(function () {
return navigator.mediaDevices.getUserMedia(mediaConstraints);
})
.then(function(stream) {
localStream = stream;
document.getElementById("local_video").srcObject = localStream;
localStream.getTracks().forEach(track => myPeerConnection.addTrack(track, localStream));
})
.then(function() {
return myPeerConnection.createAnswer();
})
.then(function(answer) {
return myPeerConnection.setLocalDescription(answer);
})
.then(function() {
var msg = {
name: myUsername,
target: targetUsername,
type: "video-answer",
sdp: myPeerConnection.localDescription
};
sendToServer(msg);
})
.catch(function(e){
//know if error is generated by getUserMedia()
});
}
执行此操作的正确方法不是查看错误对象,而是在流程中的正确位置捕获错误。
例如你可以
.then(function(stream) { ...},
(err) => { gumErrored = true; throw(err) ; }
)
这样,您仍然可以通过检查 gumErrored
标志是否为真来处理最后的捕获(假设这就是您想要的),但可以确定错误的来源。
(您可以通过将 return myPeerConnection.createAnswer()
带入同一块来跳过链中的一个承诺)
我想知道以下承诺链中的错误是由于 getUserMedia() 函数还是由于 webRTC 函数而产生的。 Firefox documentation 说:通过将 DOMException 错误对象传递给承诺的失败处理程序来拒绝返回的承诺。那么,在 chrome 和 firefox 中,我如何知道我得到的错误对象是否是 DOMException 错误对象?
function handleVideoOfferMsg(msg) {
var localStream = null;
targetUsername = msg.name;
createPeerConnection();
var desc = new RTCSessionDescription(msg.sdp);
myPeerConnection.setRemoteDescription(desc).then(function () {
return navigator.mediaDevices.getUserMedia(mediaConstraints);
})
.then(function(stream) {
localStream = stream;
document.getElementById("local_video").srcObject = localStream;
localStream.getTracks().forEach(track => myPeerConnection.addTrack(track, localStream));
})
.then(function() {
return myPeerConnection.createAnswer();
})
.then(function(answer) {
return myPeerConnection.setLocalDescription(answer);
})
.then(function() {
var msg = {
name: myUsername,
target: targetUsername,
type: "video-answer",
sdp: myPeerConnection.localDescription
};
sendToServer(msg);
})
.catch(function(e){
//know if error is generated by getUserMedia()
});
}
执行此操作的正确方法不是查看错误对象,而是在流程中的正确位置捕获错误。
例如你可以
.then(function(stream) { ...},
(err) => { gumErrored = true; throw(err) ; }
)
这样,您仍然可以通过检查 gumErrored
标志是否为真来处理最后的捕获(假设这就是您想要的),但可以确定错误的来源。
(您可以通过将 return myPeerConnection.createAnswer()
带入同一块来跳过链中的一个承诺)