如何使用可观察的结果然后返回可观察的

时间:2016-03-26 15:12:51

标签: typescript angular rxjs rxjs5

使用Rxjs我需要在Angular服务中执行4个操作,然后组件使用该服务函数:

- 调用函数" ensureHasCache():Observable"

- 调用函数" create():Observable"

- 获取create()的结果并分配一个局部变量(this._companies.push(newEntity);)

- 然后返回一个Observable以便在UI上使用它

这是我的服务代码,其中包含4个操作:

public create (data:Company):Observable<Company>
{       
    return this.ensureHasCache ().switchMap (res => {
        return super.create (data);
    }).switchMap ((newEntity:Company) => {            
        this._companies.push (newEntity);
        return ObservableUtils.fromResult (newEntity);
    });
}       

正如你在上一个switchMap中看到的,我需要返回一个observable但是 实际上我已经有了结果。所以我必须打电话给#34; fromResult&#34;。 但是这样我需要创建一个新的observalbe(&#34; fromResult&#34;创建一个新的Observable) 即使我实际上不需要它。

有更多的elegat方式吗?

这是fromResult的代码:

public static fromResult<T> (result:T):Observable<T>
{
    return new Observable<T> (obs => {
        obs.next (result);
        obs.complete ();
    });
}

1 个答案:

答案 0 :(得分:1)

我会使用observables的do运算符执行类似的操作:

public create (data:Company):Observable<Company> {       
  return this.ensureHasCache ().switchMap (res => {
    return super.create (data);
  }).do((newEntity:Company) => {            
    this._companies.push (newEntity);
  });
}