2017-03-11 19 views
1

簡単な状況で少しスタックしてください。Observable RxJSからアクションを実行

onUpload$: Subject<SomeUpload> = new Subject<SomeUpload>(); 
uploadAction$: Observable<Action> = this.onUpload$.map(entity => this.someActionService.upload(entity)); 

このuploadActionの$の使用が

this.subscription = Observable.merge(
    this.uploadAction$ 
).subscribe(this.store); 

アクションは、サーバーbase64で画像を送信し、応答に私はURLを取得状態に基づいて、agnular2コンポーネントにサブスクライブ:だから、私は、ページ上のいくつかのアップロードアクションがどのように見える持っていますこのURLは、テンプレートで使用していないbecose、このURLは私がそう

someResponseUrl$: Observable<String> = this.store.let(getSomeUrlFromState()); 

のように、次に取得することができ、私は、コールバックのようなものを作る必要があり、私はコード内のデータを操作する必要がありますよ。誰かが助けて説明することができ、この観察可能な文字列からどのように行動を起こしてデータを取得し、コールバックを行うことができますか?アドバイスありがとう!

P.S. ...私はね、この

uploadAction$: Observable<Action> = this.onUpload$.map(entity => 
    this.someActionService.upload(entity)) 
    .do(() => { 
     const subscription = 
     this.store.let(getSomeUrlFromState()).subscribe(url => { 
     console.log(url) 
     }); 
    }); 

その作業のような何かをしようと、私はそれが解決策として奇妙な方法だと思います

答えて

0
あなたは、たとえば次のようしかし、それはあなたが達成したいかに依存し、何を行うことができ

あなたはthis.someActionServiceの加入者に受信したい:

uploadAction$: Observable<Action> = this.onUpload$ 
    .map(entity => this.someActionService.upload(entity)) 
    .mergeMap(() => this.store.let(getSomeUrlFromState())) 
    .do(url => console.log(url)); 

あなたが何をしたいかに応じて、concatMapの代わりmergeMapを使用する場合があります。

+0

助けてはいけません:(URLは 'null'をURLとして取得し、次に角度2は例外を送出します:: 'mergeMap'と' concatMap'の両方の演算子を使用してみてください – vanless

+0

Canあなたはjsfiddleデモを作っていますか? – martin

関連する問題