2017-08-11 51 views
1

我擴展了可重複觀察的乒乓示例,我的最終目標是對從服務器收到的每個事件調度一個操作。訂閱來自服務器的事件流

,但我有一點麻煩纏繞我的頭圍繞如何真正實現這一點。

我有什麼至今:

1.Upon打開我的服務器開始發送消息的連接。

// server.js 
setInterval(()=>{ 
    ws.send(JSON.stringify({ 
     type: 'INCREMENT', 
     status: 200 
    })) 
    console.log("sent some data") 
},3000) 

2.在客戶端我已經建立一個可觀察的是WebSocket連接的。

const socket$ = Observable.webSocket("ws://localhost:8081") 

的代碼的其餘部分是類似於JSBin Example for react

我如何形成這個任務的史詩?我如何派遣一個行動?

+0

https://github.com/Reactive-Extensions/RxJS/issues/112 – eenagy

+0

@eenagy這是rxjs v4 btw和不準確的v5 – jayphelps

+1

嘿@ n3u3w3它不清楚你在問什麼。你可以修改嗎? – jayphelps

回答

1

我們在評論中討論了一下,但恐怕我還沒有就如何增加/計數器/ INCREMENT_APPLY涉及到插座完全清楚,但我可以給你一個簡單的例子:

const somethingEpic = action$ => 
    action$.ofType('START_SOCKET_OR_WHATEVER') 
    .switchMap(action => 
     Observable.webSocket('ws://localhost:8081') 
     .map(response => ({ type: 'RECEIVED_MESSAGE', paylod: response })) 
    ); 

這裏時START_SOCKET_OR_WHATEVER被分派,我們就開始聽我們的插座。無論何時接收到消息,我們都會將其映射到一個RECEIVED_MESSAGE動作中,這個動作在史詩發出時會被分派。

你會發現這幾乎是一樣的,你會怎麼做一個AJAX了。只有當你需要發送消息到服務器或多路複用時,它纔會變得明顯不同。

+0

非常感謝,@ jayphelps,這是我一直在尋找的確切行爲。我剛纔檢查了它,它按預期工作 - 我通過調度'SOCKET_START'動作打開連接,在動作發出後,我的應用程序開始從服務器接收ping並增加計數器值 – n3u3w3lt

+1

woohoo!很高興! – jayphelps