2017-02-27 6 views
1

나는 redux sagas와 함께 WebRTC를 사용하고 있습니다.Redux Saga : 내포 된 함수 내에서 yield + put하는 법?

function* createPeerConnection(action) { 
    ... 
    peerConnection = new RTCPeerConnection(servers); 

    peerConnection.onicecandidate = (event) => { 
    if (event.candidate) { 
     yield put({ type: videoSessionActions.SEND_LOCAL_CANDIDATE, payload: event.candidate }); 
    } 
    } 
} 

그러나, yield put이 방법에서 작동하지 않습니다 : 하나 개의 요구 사항은 내가 peerConnection.onicecandidate을 정의해야한다는 것입니다. 어떻게 이것을 사가와 함께 사용할 수 있도록 바꿀 것인가?

답변

0

희망하면 이벤트 채널은 당신을 도울 수 :

import { eventChannel, END } from 'redux-saga'; 
import { put, take } from 'redux-saga/effects'; 

import { videoSessionActions } from '../???/constants'; 

const rtcChannel = servers => eventChannel(emitter => { 
    const peerConnection = new RTCPeerConnection(servers); 
    peerConnection.onicecandidate = event => { 
    if (event.candidate) { 
     emitter({type: videoSessionActions.SEND_LOCAL_CANDIDATE, payload: event.candidate}); 
    } 
    }; 
    return() => { 
    peerConnection.close(); 
    }; 
} 
// ,buffers.expanding(1024) ??? 
); 

function* createPeerConnection(servers) { 
    const ch = rtcChannel(servers); 

    while(true) { // eslint-disable-line no-constant-condition 
    const candidate = yield take(ch); 
    yield put(candidate); 
    } 
}