2017-07-05 7 views
0

私はwebSocketをリッスンするためのeventChannelを持っていますが、これは問題ありません。特定のアクションが発生したときにeventChannelを閉じる方法

また、アクションUSER_LOGGED_OUTを聞き、チャンネルを閉じたいと思います。

ソケットエラーまたはソケットクローズの場合は、ENDを発行してチャネル内からチャネルをクローズしていますが、これはどのように外部アクションに基づいて行いますか?

これは、チャネルループです:

これを自分自身に答える
export function* websocketWatcher() { 
    const tokenResponse = yield take(RECEIVE_USER_TOKEN); 
    const accessToken = tokenResponse.payload.data.access_token; 

    const channel = yield call(createWebsocketChannel, accessToken); 
    try { 
    while (true) { 
     const action = yield take(channel); 
     yield put(action); 
    } 
    } finally { 
    console.log('Websocket channel terminated'); 
    } 
} 

答えて

1

..

は、私はちょうどドキュメントでchannel.close()を発見しました。私はそれを逃した方法を知らない。私は、チャンネル(受信ソケットデータ)とログアウトされたアクションとの間の競争でそれを解決しました。

export function* websocketWatcher() { 
    const tokenResponse = yield take(RECEIVE_USER_TOKEN); 
    const accessToken = tokenResponse.payload.data.access_token; 

    const channel = yield call(createWebsocketChannel, accessToken); 
    try { 
    while (true) { 
     const { logoutAction, socketAction } = yield race({ 
     logoutAction: take(USER_LOGGED_OUT), 
     socketAction: take(channel) 
     }); 

     if (logoutAction) { 
     channel.close(); 
     } else { 
     yield put(socketAction); 
     } 
    } 
    } finally { 
    console.log('Websocket channel terminated'); 
    } 
} 
関連する問題