2017-07-05 2 views
0

Ich habe einen eventChannel, um webSockets zu hören, das funktioniert gut.Wie man einen eventChannel schließt, wenn eine bestimmte Aktion auftritt

Ich möchte auch eine Aktion USER_LOGGED_OUT zuhören und den Kanal schließen.

Ich schließe den Kanal aus dem Kanal durch die Ausgabe END im Falle eines Socket-Fehler oder Socket-Schließung, aber wie mache ich das auf der Grundlage von externen Aktionen?

Dies ist die Kanal-Schleife:

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'); 
    } 
} 

Antwort

1

das selbst beantworten ..

Ich habe gerade channel.close() in der Dokumentation. Ich weiß nicht, wie ich das vermisst habe. Ich habe es mit einem Rennen zwischen dem Kanal (eingehende Socket-Daten) und der ausgeloggten Aktion gelöst.

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'); 
    } 
} 
Verwandte Themen