从Observable RxJS采取行动

时间:2017-03-11 06:12:00

标签: angular typescript rxjs

在一个简单的情况下堆叠一点。所以,我在页面上有一些上传动作如下:

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

此uploadAction $使用agnular2组件订阅,基于状态

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

动作发送到服务器base64图像并作为响应我得到网址,这个网址我可以得到像

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

所以,我需要做一些像回调,因为这个url没有在模板中使用,我只需要在代码中操作数据。有人可以帮助和解释,如何从这个可观察的字符串中进行操作,获取数据并使用它进行回调。谢谢你的建议!

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)
      });
    });

它的工作,但我认为这是解决方案的奇怪方式......

1 个答案:

答案 0 :(得分: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,具体取决于您要执行的操作。