如何使用可观察结果然后 return 可观察结果
How to use an observable result and then return the observable
使用 Rxjs 我需要在 Angular 服务中执行 4 个操作,然后组件使用该服务功能:
-调用函数"ensureHasCache():Observable"
-调用函数"create():Observable"
-取create()的结果并赋值一个局部变量(this._companies.push(newEntity);)
-然后 return 一个 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 中看到的那样,我需要 return 一个可观察但
其实我已经有了结果。所以我不得不打电话给"fromResult"。
但是这样我需要创建一个新的 observable("fromResult" 创建一个新的 Observable)
即使我真的不需要它。
有没有更优雅的方式?
这是 fromResult 的代码:
public static fromResult<T> (result:T):Observable<T>
{
return new Observable<T> (obs => {
obs.next (result);
obs.complete ();
});
}
我会使用 Observables 的 do
运算符做类似的事情:
public create (data:Company):Observable<Company> {
return this.ensureHasCache ().switchMap (res => {
return super.create (data);
}).do((newEntity:Company) => {
this._companies.push (newEntity);
});
}
使用 Rxjs 我需要在 Angular 服务中执行 4 个操作,然后组件使用该服务功能:
-调用函数"ensureHasCache():Observable"
-调用函数"create():Observable"
-取create()的结果并赋值一个局部变量(this._companies.push(newEntity);)
-然后 return 一个 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 中看到的那样,我需要 return 一个可观察但 其实我已经有了结果。所以我不得不打电话给"fromResult"。 但是这样我需要创建一个新的 observable("fromResult" 创建一个新的 Observable) 即使我真的不需要它。
有没有更优雅的方式?
这是 fromResult 的代码:
public static fromResult<T> (result:T):Observable<T>
{
return new Observable<T> (obs => {
obs.next (result);
obs.complete ();
});
}
我会使用 Observables 的 do
运算符做类似的事情:
public create (data:Company):Observable<Company> {
return this.ensureHasCache ().switchMap (res => {
return super.create (data);
}).do((newEntity:Company) => {
this._companies.push (newEntity);
});
}