如何结合两个Observable。 Rx 6.2.2

问题描述 投票:0回答:1

我有两个对后端的调用,只有当两个响应都准备就绪时我才需要处理结果:

this.historyService.fetchBalance().subscribe((balance: Balance[]) => {
    this.servicesBalance = balance;
});

this.historyService.fetchOuts().subscribe((outs: History[]) => {
    this.outHistories = outs;
});

我知道forkJoin方法,但它返回数组,我丢失了类型,如下所示:

...subscribe([v1, v2] => ...)

我想保存返回值的类型,如下所示:

...subscribe(balance: Balance[], outs: History[] => ...)

在我的案例中如何结合Observables?

myQuestionUnionMethod(
    this.historyService.fetchBalance(),
    this.historyService.fetchOuts()
)
    .subscribe(balance: Balance[], outs: History[] => ...)
typescript rxjs6
1个回答
2
投票

你试过zip吗?看来properly typed

export function zip<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>): Observable<[T, T2]>;
export function zip<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<[T, T2, T3]>;
export function zip<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<[T, T2, T3, T4]>;
export function zip<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<[T, T2, T3, T4, T5]>;
export function zip<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<[T, T2, T3, T4, T5, T6]>;

第二个想法,forkJoin似乎也正确输入:

export function forkJoin<T>(sources: [ObservableInput<T>]): Observable<T[]>;
export function forkJoin<T, T2>(sources: [ObservableInput<T>, ObservableInput<T2>]): Observable<[T, T2]>;
export function forkJoin<T, T2, T3>(sources: [ObservableInput<T>, ObservableInput<T2>, ObservableInput<T3>]): Observable<[T, T2, T3]>;
export function forkJoin<T, T2, T3, T4>(sources: [ObservableInput<T>, ObservableInput<T2>, ObservableInput<T3>, ObservableInput<T4>]): Observable<[T, T2, T3, T4]>;
export function forkJoin<T, T2, T3, T4, T5>(sources: [ObservableInput<T>, ObservableInput<T2>, ObservableInput<T3>, ObservableInput<T4>, ObservableInput<T5>]): Observable<[T, T2, T3, T4, T5]>;
export function forkJoin<T, T2, T3, T4, T5, T6>(sources: [ObservableInput<T>, ObservableInput<T2>, ObservableInput<T3>, ObservableInput<T4>, ObservableInput<T5>, ObservableInput<T6>]): Observable<[T, T2, T3, T4, T5, T6]>;
export function forkJoin<T>(sources: Array<ObservableInput<T>>): Observable<T[]>;

是什么让你认为返回值没有正确输入?你有一个“丢失类型”的例子吗?

© www.soinside.com 2019 - 2024. All rights reserved.