2017-09-09 14 views
0

저는이 프레임 워크에 비교적 익숙하지 않으며 드라이버 생성에 대해 놀려고합니다. 이 코드를 이해 :사이클 js 드라이버를 만듭니다.

import {adapt} from '@cycle/run/lib/adapt'; 

function makeSockDriver(peerId) { 
    let sock = new Sock(peerId); 

    function sockDriver(outgoing$) { 
    outgoing$.addListener({ 
     next: outgoing => { 
     sock.send(outgoing)); 
     }, 
     error:() => {}, 
     complete:() => {}, 
    }); 

    const incoming$ = xs.create({ 
     start: listener => { 
     sock.onReceive(function (msg) { 
      listener.next(msg); 
     }); 
     }, 
     stop:() => {}, 
    }); 

    return adapt(incoming$); 
    } 

    return sockDriver; 
} 

하지만 난 아직 확실하지 않다 리스너 (수신 $)를 가지고있는 HTTP 드라이버와 같은 매개 변수를 사용하는 방법이 무엇 :

const response$ = HTTP 
     .select('posts') 
+0

처럼 (당신의 구성 요소를 필터링 결국)를 incoming$는 드라이버에 의해 반환 된 사용하려는' 들어오는 $'? – bloodyKnuckles

답변

1

는 HTTP에서 select 방법은하지 않습니다 당신이 t이 있다면 당신이 (당신이 select 방법이 필요 느끼는 경우에,

그래서 : xstream에서 온이 구현되며 HTTP 드라이버에 의해 반환되는 방법 (https://github.com/cyclejs/cyclejs/blob/462e53a67e05d48091c002f004e51ae1f322f7a3/http/src/MainHTTPSource.ts#L20 여기 그 방법의 구현을 볼 수 있습니다)입니다 오 당신이 드라이버에 직접 구현하고 난 당신이 소켓 드라이버에 대한 선택 방법을 필요가 있다고 생각하지 마십시오 sockDriver 기능 말했다되고 그건

function makeSockDriver(peerId) { 
    let sock = new Sock(peerId); 

    function sockDriver(outgoing$) { 
    const incoming$ = /* ... */ 

    function select(category) { 
     const res$ = category ? 
     incoming$.filter(data => /* filter the data here */) : 
     incoming$; 

     return res$; 
    } 
    return { select }; // an object with the `select` method 
    } 

    return sockDriver; 
} 

, 에 반환 할 수 있습니다) 당신의 소켓 소스를 필터링! select은 소스가 인 싱크에 따라 을 필터링 할 수있는 규칙입니다.

예를 들어, 구성 요소 중 하나가 doThing 범주의 HTTP 요청을 발행하면 해당 구성 요소에서 doThing 범주의 응답을 select 수 있습니다.

귀하의 경우 (소켓 드라이버)에는 요청 - 응답 패턴이 없습니다. 싱크와 소스 사이에는 명확한 링크가 없습니다 (응답 메시지를 보내지 않는 메시지를 트리거 할 수 있으며 보낸 메시지에 링크되지 않은 응답 메시지를받을 수 있음). 내가 당신이라면

그래서, 난 그냥 당신이 매개 변수를 사용할 계획 할 방법이

function component({ socket }) { 
    /* here `socket` is the `incoming$` you return in the `sockDriver` 
    const socketData$ = socket.filter(data => /* predicate here */); 

    return { 
    /* sinks */ 
    } 
}