2017-09-09 10 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方法はありませんあなたはトンを持っている場合、あなたは(あなたがselect方法が必要と感じた場合、

ので:xstreamから来る、それが実装され、HTTPドライバによって返される方法は、(https://github.com/cyclejs/cyclejs/blob/462e53a67e05d48091c002f004e51ae1f322f7a3/http/src/MainHTTPSource.ts#L20あなたがここにそのメソッドの実装を見ることができます)ですO)あなたのソケットソースをフィルタリングし、あなたは運転手にそれを自分で実装すると言われていること、あなたの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は、ある程度、ソースを生成したシンクに従ってのソースをフィルタリングすることを可能にする規則です。

たとえば、コンポーネントの1つで、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 */ 
    } 
} 
関連する問題