2017-07-20 8 views
0

AJAX要求を実行し、その結果のデータを2つの異なる場所に送信する必要があるため、マルチキャストを使用していたこれを達成する最も簡単な方法が観察可能でした。私の「アプリ」オブジェクトのコンストラクタでマルチキャスト可読性:「プロパティを読み取れません」未定義のサブスクライブ「エラー」

::私のコードは次のようになり

this.getEpisodeDescription = (id) => jsonLoader("http://www.randomtext.me/api/lorem/p-2/8-24", "text_out"); 

function jsonLoader (url, field) 
{ 
    let stream = Rx.Observable.ajax ({ url: url, crossDomain: true }) 
           .retry (1) 
           .pluck ("response"); 
    if (field !== undefined) 
     return stream.pluck(field); 
    else 
     return stream; 
} 

単一の受信機のデータを取得する前に、私はこの方法を成功裏に使用しましたので、私はこれがあると確信していますうまく働いている。呼び出し側はしかし、新しいです:

loadSummary (id) 
{ 
    let cachedValue = this.summaries.get(id); 
    if (cachedValue !== undefined) return Rx.Observable.of(cachedValue); 

    let observable = this.app.getEpisodeDescription(id); 
    let multicast = observable.multicast().refCount(); 
    multicast.subscribe(result => this.summaries.put(id, result)); 
    return multicast; 
} 

私は、このメソッドを実行しようとすると、私は次のスタックトレースを取得:

Uncaught TypeError: Cannot read property 'subscribe' of undefined 
    at Observable.ConnectableObservable._subscribe (app.js:44193) 
    at Observable._trySubscribe (app.js:10253) 
    at Observable.subscribe (app.js:10241) 
    at RefCountOperator.call (app.js:44275) 
    at Observable.subscribe (app.js:10238) 
    at AsyncAction.SubscribeOnObservable.dispatch (app.js:71532) 
    at AsyncAction._execute (app.js:21083) 
    at AsyncAction.execute (app.js:21058) 
    at AsyncScheduler.flush (app.js:21156) 

(ファイル名と行番号を無視 - 私はWebPACKのを使用していますし、現時点では現用回線番号マップを作成していないようです)

何が起こっているのですか?具体的には、適切なsubscribeなどのメソッドを持つmulticastへの呼び出しからオブジェクトを取得するとどうなりますか?しかし、それに加入しようとすると、それは明らかに親に加入できません。

答えて

1

演算子の最初のパラメータは、Subjectファクトリ関数またはSubjectインスタンスです。

これを使用すると、1つの共有Subjectインスタンスを持たせたい場合は、このようにそれを使用する必要がありますを意味します

let multicast = observable.multicast(new Subject()).refCount(); 

...または、このようなすべての観測者のための新しい件名を作るために:

let multicast = observable.multicast(() => new Subject()).refCount(); 
関連する問題