2016-04-04 6 views
3

のためにMozillaで未定義のオブジェクトを返し着信コール答えるために私のコードです:RTCPeerConnection.createAnswerコールバックには、以下のWebRTCチャット

var pc = connection.pc; 
pc.setRemoteDescription(sdp,function() { 
pc.createAnswer(function(answer) { 
    pc.setLocalDescription(answer,function() { 
    // code for sending the answer 
}) 
}) 
}) 

上記のコードは、クロムのために正常に動作しますが、私はMozillaで同じことを実行したときに、 pc.createAnswerコールバックから取得したanswerundefinedです。それは私に次のエラーを与えるの結果:

TypeError: Argument 1 of RTCPeerConnection.setLocalDescription is not an object.

答えて

1

問題がある、あなたは具体的には、エラーをチェックしていない:必要なエラーコールバックを渡していません。

setRemoteDescriptionsetRemoteDescriptionは、(約束)three arguments(レガシーコールバックスタイル)またはoneのいずれかが必要ですが、次の2つを渡しています。 createAnswerマイナス1と同じです。

ブラウザのJSバインディングは、間違った過負荷を選択し、どちらもチェックしていない約束を返し、効果的にエラーを飲み込んでしまいます。

var pc = connection.pc; 
pc.setRemoteDescription(sdp, function() { 
    pc.createAnswer(function(answer) { 
    pc.setLocalDescription(answer, function() { 
     // code for sending the answer 
    }, function(e) { 
     console.error(e); 
    }); 
    }, function(e) { 
    console.error(e); 
    }); 
}, function(e) { 
    console.error(e); 
}); 

するか、近代的な約束のAPIを使用します:

のいずれかが必要なエラーコールバックを追加し

var pc = connection.pc; 
pc.setRemoteDescription(sdp) 
    .then(() => pc.createAnswer()) 
    .then(answer => pc.setLocalDescription(answer)) 
    .then(() => { 
    // code for sending the answer 
    }) 
    .catch(e => console.error(e)); 

約束のAPIがFirefoxでネイティブに利用可能である、またはChromeでadapter.jsて。 fiddleを参照してください。

常にエラーをチェックしてください。 ;)

+0

私はMDNを更新しました。 – jib