【问题标题】:How to use an observable result and then return the observable如何使用 observable 结果然后返回 observable
【发布时间】:2016-07-14 05:05:25
【问题描述】:

使用 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 中看到的,我需要返回一个可观察但 其实我已经有了结果。所以我必须调用“fromResult”。 但是这样我需要创建一个新的observalbe(“fromResult”创建一个新的Observable) 即使我真的不需要它。

还有更优雅的方式吗?

这是fromResult的代码:

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

【问题讨论】:

    标签: typescript angular rxjs rxjs5


    【解决方案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);
      });
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2021-02-05
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 2020-02-12
      • 2017-11-01
      相关资源
      最近更新 更多