34

在 RxJS 6 中,如何导入静态合并函数来合并 Observable 列表?

我希望能够做到:

const merged$ = merge(
    obs1$,
    obs2$,
    obs3$
);

我试过了:

import { merge } from 'rxjs/observable/merge';

import { merge } from 'rxjs/operators';

但似乎两者都没有给我想要的东西。

4

4 回答 4

39

在 RxJS 6 中导入变得很容易:

 import { merge } from 'rxjs';

您可能需要阅读官方迁移指南

关于在 RxJS 6 中导入的另一个有用资源是RxJS负责人 Ben Lesh 的演讲。

于 2018-04-27T12:10:00.827 回答
6

我相信现在删除“创建”类后,推荐的方法是直接从以下位置导入'rxjs'

import { merge as mergeStatic } from 'rxjs';

以前的 alpha 版本的 RxJS 6 曾经有'rxjs/create'文件,但这已经被删除:https ://github.com/ReactiveX/rxjs/blob/master/CHANGELOG.md#600-alpha3-2018-02-06

但是,这要求您正确使用路径图,否则您将导入很多不需要的东西。如果您不使用路径图或隐藏的构建过程,您可以直接导入正确的文件:

import { merge as mergeStatic } from 'rxjs/internal/observable/merge';
于 2018-04-27T12:22:05.213 回答
3

RxJS 7.X

在 RxJS v7.X 中,该merge()方法已被弃用,将在 RxJs v8.X 中删除,请改用mergeWith()

请参阅:
https ://rxjs.dev/api/operators/mergeWith
https://rxjs.dev/api/operators/merge(已弃用)

import { fromEvent } from 'rxjs';
import { map, mergeWith } from 'rxjs/operators';

const clicks$ = fromEvent(document, 'click').pipe(map(() => 'click'));
const mousemoves$ = fromEvent(document, 'mousemove').pipe(map(() => 'mousemove'));
const dblclicks$ = fromEvent(document, 'dblclick').pipe(map(() => 'dblclick'));

mousemoves$.pipe(
  mergeWith(clicks$, dblclicks$),
)
.subscribe(x => console.log(x));

// result (assuming user interactions)
// "mousemove"
// "mousemove"
// "mousemove"
// "click"
// "click"
// "dblclick"

(来自 api 文档的示例)

于 2021-06-03T14:24:19.353 回答
0

从 RXJS 6 开始。合并在 rxjs/operators

import { map, take, merge, switchMap, filter } from 'rxjs/operators';
于 2018-06-29T16:47:20.753 回答