Concat 列表和可观察列表
Concat list and observable list
假设我有 3 个列表。其中两个是基本列表,而最后一个是可观察列表。
问题是我现在想将不可观察列表合并到可观察列表中。
现在我做了这样的事情,但我觉得它“违背了可观察性的本质”
listToMerge = []
listObs$: BehaviorSubject<[]> = new BehaviorSubject([]);
listObsCopy = []
我已经使用 next 方法在 listObs 中添加了一些元素
listObs$.next(someStuff);
listObsCopy = somestuff;
这是我合并它们的尝试。
listToMerge = listObsCopy.concat(someOtherStuff);
listObs$.next(listToMerge as any);
您可以轻松地从数组创建一个可观察对象,然后使用 from()
函数连接它们:
https://www.learnrxjs.io/learn-rxjs/operators/creation/from
const arraySource = from([1, 2, 3, 4, 5]);
const arraySource2 = from([6, 7, 8]);
arraySource.concat(arraySource2).subscribe()
这是您要找的吗?它将使用 RxJS 将所有数组合并为一个数组。
import { BehaviorSubject, merge } from 'rxjs';
import { concatAll, take, tap, toArray } from 'rxjs/operators';
// Subject (and Observable with take(1) to force completion.)
let listSubject: BehaviorSubject<string[]> = new BehaviorSubject<string[]>(['B1', 'B2']);
let listObs$ = listSubject.asObservable().pipe(take(1));
// List to Merge
let listToMerge = ['1', '2'];
let mergedObs$ = merge(listToMerge, listObs$).pipe(concatAll(), toArray());
mergedObs$.subscribe((value) => console.log('merged array:', value));
https://stackblitz.com/edit/typescript-ukxwep?file=index.ts
诀窍在于使用 concatAll() 运算符来展平所有数组,然后使用 toArray() 运算符从中生成 1 个数组。
请注意,我已将 take(1) 添加到主题的可观察对象中。订阅只会在 Observable 结束时开始。
假设我有 3 个列表。其中两个是基本列表,而最后一个是可观察列表。
问题是我现在想将不可观察列表合并到可观察列表中。
现在我做了这样的事情,但我觉得它“违背了可观察性的本质”
listToMerge = []
listObs$: BehaviorSubject<[]> = new BehaviorSubject([]);
listObsCopy = []
我已经使用 next 方法在 listObs 中添加了一些元素
listObs$.next(someStuff);
listObsCopy = somestuff;
这是我合并它们的尝试。
listToMerge = listObsCopy.concat(someOtherStuff);
listObs$.next(listToMerge as any);
您可以轻松地从数组创建一个可观察对象,然后使用 from()
函数连接它们:
https://www.learnrxjs.io/learn-rxjs/operators/creation/from
const arraySource = from([1, 2, 3, 4, 5]);
const arraySource2 = from([6, 7, 8]);
arraySource.concat(arraySource2).subscribe()
这是您要找的吗?它将使用 RxJS 将所有数组合并为一个数组。
import { BehaviorSubject, merge } from 'rxjs';
import { concatAll, take, tap, toArray } from 'rxjs/operators';
// Subject (and Observable with take(1) to force completion.)
let listSubject: BehaviorSubject<string[]> = new BehaviorSubject<string[]>(['B1', 'B2']);
let listObs$ = listSubject.asObservable().pipe(take(1));
// List to Merge
let listToMerge = ['1', '2'];
let mergedObs$ = merge(listToMerge, listObs$).pipe(concatAll(), toArray());
mergedObs$.subscribe((value) => console.log('merged array:', value));
https://stackblitz.com/edit/typescript-ukxwep?file=index.ts
诀窍在于使用 concatAll() 运算符来展平所有数组,然后使用 toArray() 运算符从中生成 1 个数组。
请注意,我已将 take(1) 添加到主题的可观察对象中。订阅只会在 Observable 结束时开始。