2015-03-16 3 views
0

Я использую массив pc для сохранения RTCPeerConnections от 1 клиента к другим клиентам, затем звоните createOffer.Multi peer connection in webrtc

pc глобальная переменная, но имеет ошибку: внутри createOffer function, я получаю pc[list[i]] is 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); 
} 

ответ

3

должна быть обычная проблема с обратных вызовов внутри для цикла, попробуйте назначить значение 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); 
} 

Edit:

другой вариант может быть (я предполагаю, что список является список уникальных идентификаторов):

... 
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); 
} 
Смежные вопросы