可观察类型上不存在 mergeMap
mergeMap does not exist on type observable
我正在尝试在 rxjs6
中使用 mergeMap
,但出现此错误:
Property 'mergeMap' does not exist on type 'Observable<{}>'
我试过了import 'rxjs/add/operator/mergeMap';
,但还是不行。
我做错了什么?
import {from, Observable} from 'rxjs';
export class Test {
public doSomething(): Observable<any> {
return from(...).mergeMap();
}
}
没错,从 RxJS 6 开始,运算符的 "patch" 风格已经被移除。你最好更新你的代码,只使用 "pipeable" 运算符,或者安装 rxjs-compat
向后提供的包与 RxJS 5 的兼容性。
更详细的说明见官方文档:https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md
...更具体地说,这部分:https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md#backwards-compatibility
感谢@martin 给出的答案,我能够在 rxjs6
中使用新的 pipe
操作。这是我的工作代码。
import {from, Observable} from 'rxjs';
import {mergeMap} from 'rxjs/operators';
export class Test {
public doSomething(): Observable<any> {
return from(...).pipe(mergeMap(...));
}
}
导入单个运算符,然后使用管道而不是链接。
import { map, filter, catchError, mergeMap } from 'rxjs/operators';
source.pipe(
map(x => x + x),
mergeMap(n => of(n + 1, n + 2).pipe(
filter(x => x % 1 == 0),
scan((acc, x) => acc + x, 0),
)),
catchError(err => of('error found')),
).subscribe(printResult);
组件Html是这样的
<input type="text" placeholder="input first" id="input1">
<input type="text" id="input2" placeholder="input second">
<span></span>
导入所需函数
import { fromEvent } from 'rxjs'
import { map, mergeMap } from 'rxjs/operators'
var span = document.querySelector('span');
var input1 = document.querySelector('#input1');
var input2 = document.querySelector('#input2');
var obs1 = fromEvent(input1, 'input');
var obs2 = fromEvent(input2, 'input');
var obs1 = fromEvent(input1, 'input');
var obs2 = fromEvent(input2, 'input');
obs1.pipe(mergeMap(event1 => obs2.pipe(
map(event2 => (<HTMLInputElement>event1.target).value
+ " "
+ (<HTMLInputElement>event2.target).value))))
.subscribe((result) => {
span.textContent=result;
})
我正在尝试在 rxjs6
中使用 mergeMap
,但出现此错误:
Property 'mergeMap' does not exist on type 'Observable<{}>'
我试过了import 'rxjs/add/operator/mergeMap';
,但还是不行。
我做错了什么?
import {from, Observable} from 'rxjs';
export class Test {
public doSomething(): Observable<any> {
return from(...).mergeMap();
}
}
没错,从 RxJS 6 开始,运算符的 "patch" 风格已经被移除。你最好更新你的代码,只使用 "pipeable" 运算符,或者安装 rxjs-compat
向后提供的包与 RxJS 5 的兼容性。
更详细的说明见官方文档:https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md
...更具体地说,这部分:https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md#backwards-compatibility
感谢@martin 给出的答案,我能够在 rxjs6
中使用新的 pipe
操作。这是我的工作代码。
import {from, Observable} from 'rxjs';
import {mergeMap} from 'rxjs/operators';
export class Test {
public doSomething(): Observable<any> {
return from(...).pipe(mergeMap(...));
}
}
导入单个运算符,然后使用管道而不是链接。
import { map, filter, catchError, mergeMap } from 'rxjs/operators';
source.pipe(
map(x => x + x),
mergeMap(n => of(n + 1, n + 2).pipe(
filter(x => x % 1 == 0),
scan((acc, x) => acc + x, 0),
)),
catchError(err => of('error found')),
).subscribe(printResult);
组件Html是这样的
<input type="text" placeholder="input first" id="input1">
<input type="text" id="input2" placeholder="input second">
<span></span>
导入所需函数
import { fromEvent } from 'rxjs'
import { map, mergeMap } from 'rxjs/operators'
var span = document.querySelector('span');
var input1 = document.querySelector('#input1');
var input2 = document.querySelector('#input2');
var obs1 = fromEvent(input1, 'input');
var obs2 = fromEvent(input2, 'input');
var obs1 = fromEvent(input1, 'input');
var obs2 = fromEvent(input2, 'input');
obs1.pipe(mergeMap(event1 => obs2.pipe(
map(event2 => (<HTMLInputElement>event1.target).value
+ " "
+ (<HTMLInputElement>event2.target).value))))
.subscribe((result) => {
span.textContent=result;
})