webrtc中的多对等连接

dai*_*ito 1 javascript

我使用数组pc将 RTCPeerConnections 从 1 个客户端保存到其他客户端,然后调用createOffer.

pc是全局变量,但有一个错误:在 createOffer 函数中,我得到的pc[list[i]]undefined. 我如何解决它?

for (var i = 0; i<list.length - 1; i++) {
    pc[list[i]] = createPC(list[i]);
    pc[list[i]].createOffer(function (localDesc) {
        pc[list[i]].setLocalDescription(localDesc);
        send(localDesc, list[i]);
    }, doNothing, constraints);
}
Run Code Online (Sandbox Code Playgroud)

mid*_*ido 5

一定是 for 循环内部回调的常见问题,尝试绑定的值i

for (var i = 0; i<list.length - 1; i++) {
    pc[list[i]] = createPC(list[i]);
    (function(i){
        pc[list[i]].createOffer(function (localDesc) {
            pc[list[i]].setLocalDescription(localDesc);
            send(localDesc, list[i]);
        }, doNothing, constraints);
    })(i);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

另一种选择可能是(我假设该列表是唯一 ID 列表):

...
for (var i = 0; i<list.length - 1; i++) {
    var id = list[i];
    pc[id] = createPC(id);
    pc[id].createOffer(onOffer.bind({id:id}), doNothing, constraints);
}
...
function onOffer(localDesc){
    pc[this.id].setLocalDescription(localDesc);
    send(localDesc, this.id);
}
Run Code Online (Sandbox Code Playgroud)