¿Hay alguna manera fácil de await a que se complete con los candidatos? Podemos await la oferta y la descripción, pero no veo una forma de esperar a los candidatos (el sdp completo se enviará al servidor de señalización).
P.ej:
const pc = new RTCPeerConnection(configuration); const sendChannel = pc.createDataChannel("sendChannel"); const offer = await pc.createOffer(); await pc.setLocalDescription(offer); // need something like this; await pc.onIceCandidateComplete();; // send the offer to signaling server once we have all the data. send(offer); Veo oniceconnectionstatechange() , y onicecandidate() que se pueden usar, pero ninguno admite await async , o no puedo encontrar un buen ejemplo.
¿Alguien ha encontrado una buena solución para esto o hay alguna razón para no tener esta funcionalidad? ¿Cuál es la mejor manera?
No hay ningún evento directamente esperable. Puede usar una construcción como la función waitUntilEvent que se encuentra aquí :
await (new Promise(r => { pc.addEventListener( 'icegatheringstatechange', () => pc.gatheringState === 'complete' && r() ) }));Sin embargo, tenga en cuenta que este cambio de estado puede llevar mucho tiempo (más de 30 s) en ciertos casos. Este error tiene algunas notas. Por lo general, querrá esperar otras condiciones, como el primer candidato de relevo, o agregar un tiempo de espera.