我一直有这个错误在这里输入图像描述
一直在尝试使用异步来等待更新本地描述但是我的代码现在如何工作它不会……
理解异步代码没有解决方法。你在这里cut your。。。
如果你不打算使用 异步/ AWAIT 那么你需要应对JavaScript是单线程的,并且不能阻止等待异步操作完成,所以你永远不能直接使用异步方法的返回值,就像你试图在这做:
createAnswer 是一个异步方法,返回一个 诺言 ,而不是答案,所以这是 错误 :
createAnswer
pc.setLocalDescription( // <-- wrong pc.createAnswer(setLocalAndSendMessage, function(err) { // console .log(err.name + ': ' + err.message) .then(pc.setLocalDescription); }) );
你在打电话 setLocalDescription(promise) ,这会给你提到的错误,因为承诺不是有效的描述。代替, promise是您附加回调的对象 :
setLocalDescription(promise)
const promise = pc.createAnswer(); promise.then(setLocalAndSendMessage, function(err) { console.log(err.name + ': ' + err.message); });
或者干脆:
pc.createAnswer() .then(setLocalAndSendMessage, function(err) { console.log(err.name + ': ' + err.message); });
我们甚至可以使用 then 先后形成一个 承诺链 :
then
pc.createAnswer() .then(function(answer) { return pc.setLocalDescription(answer); }) .then(function() { sendMessage(pc.localDescription); }) .catch(function(err) { console.log(err.name + ': ' + err.message); });
另外,我不应该告诉你 console.log() 不承诺!
console.log()
可悲的是,你在复制 真的老代码 在这里,和 RTCPeerConnection 有一些遗留的API并做一些技巧,有时让调用者在没有真正的承诺链接或检查错误的情况下调用这些协商方法。但它不可避免地导致麻烦。
RTCPeerConnection