缺少 rxjs 平面图
rxjs flatmap missing
我尝试链接多个 rx.js observables 并传递数据。 Flatmap
应该是拟合运算符,但导入了
import { Observable } from 'rxjs/Observable';
未找到:
Error TS2339: Property 'flatmap' does not exist on type 'Observable<Coordinates>'
使用 rx.js 的版本 5.0.0-beta.6
。
public getCurrentLocationAddress():Observable<String> {
return Observable.fromPromise(Geolocation.getCurrentPosition())
.map(location => location.coords)
.flatmap(coordinates => {
console.log(coordinates);
return this.http.request(this.geoCodingServer + "/json?latlng=" + coordinates.latitude + "," + coordinates.longitude)
.map((res: Response) => {
let data = res.json();
return data.results[0].formatted_address;
});
});
}
原来答案很简单:
运算符在此版本的 rxjs
中称为 mergeMap
编辑:
此外,您可能必须使用 import 'rxjs/add/operator/mergeMap'
。
在我的例子中,我需要为 mergeMap 导入扩充:
import 'rxjs/add/operator/mergeMap';
由于flatMap是mergeMap的别名,导入上面的模块就可以使用flatMap了。
对我有用!
import { Observable } from 'rxjs/Rx';
正确的导入应该如下所示:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/mergeMap';
导入模块 mergeMap
将使您能够在代码中使用 flatMap
当您将导入代码 import { Observable } from 'rxjs/Rx';
时,不需要额外的 mergeMap
导入,但您可能会在 AoT 编译期间出现错误。
ERROR in ./node_modules/rxjs/_esm5/observable/BoundCallbackObservable.js
Module build failed: TypeError: Cannot read property 'type' of undefined
在 RxJS 5.5+ 中,flatMap
运算符已重命名为 mergeMap
。相反,您现在应该将 mergeMap
运算符与 pipe
结合使用。
您仍然可以使用别名 FlatMap
来使用 flatMap。
RxJS v5.5.2 is the default dependency version for Angular 5.
对于您导入的每个 RxJS 运算符,包括 mergeMap
,您现在应该从 'rxjs/operators' 导入并使用管道运算符。
在 Http 请求 Observable 上使用 mergeMap 的示例
import { Observable } from 'rxjs/Observable';
import { catchError } from 'rxjs/operators';
...
export class ExampleClass {
constructor(private http: HttpClient) {
this.http.get('/api/words').pipe(
mergeMap(word => Observable.of(word.join(' '))
);
}
...
}
注意这里 flatMap
替换为 mergeMap
并且 pipe
运算符用于以类似于您习惯的方式组合运算符带点链。
有关可出租运算符的详细信息,请参阅 rxjs 文档
https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md
快速更新 - 2019 年 5 月
使用 rxjs v6.5.1
作为 mergeMap
运算符导入,例如/
import { Observable, from, of } from "rxjs";
import { map, filter, mergeMap } from "rxjs/operators";
然后结合新的pipe
功能使用,eg/
var requestStream = of("https://api.github.com/users");
var responseStream = requestStream.pipe(
mergeMap(requestUrl => {
console.log(requestUrl);
... // other logic
return rp(options); // returns promise
})
);
我尝试链接多个 rx.js observables 并传递数据。 Flatmap
应该是拟合运算符,但导入了
import { Observable } from 'rxjs/Observable';
未找到:
Error TS2339: Property 'flatmap' does not exist on type 'Observable<Coordinates>'
使用 rx.js 的版本 5.0.0-beta.6
。
public getCurrentLocationAddress():Observable<String> {
return Observable.fromPromise(Geolocation.getCurrentPosition())
.map(location => location.coords)
.flatmap(coordinates => {
console.log(coordinates);
return this.http.request(this.geoCodingServer + "/json?latlng=" + coordinates.latitude + "," + coordinates.longitude)
.map((res: Response) => {
let data = res.json();
return data.results[0].formatted_address;
});
});
}
原来答案很简单:
运算符在此版本的 rxjs
中称为mergeMap
编辑:
此外,您可能必须使用 import 'rxjs/add/operator/mergeMap'
。
在我的例子中,我需要为 mergeMap 导入扩充:
import 'rxjs/add/operator/mergeMap';
由于flatMap是mergeMap的别名,导入上面的模块就可以使用flatMap了。
对我有用!
import { Observable } from 'rxjs/Rx';
正确的导入应该如下所示:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/mergeMap';
导入模块 mergeMap
将使您能够在代码中使用 flatMap
当您将导入代码 import { Observable } from 'rxjs/Rx';
时,不需要额外的 mergeMap
导入,但您可能会在 AoT 编译期间出现错误。
ERROR in ./node_modules/rxjs/_esm5/observable/BoundCallbackObservable.js
Module build failed: TypeError: Cannot read property 'type' of undefined
在 RxJS 5.5+ 中,flatMap
运算符已重命名为 mergeMap
。相反,您现在应该将 mergeMap
运算符与 pipe
结合使用。
您仍然可以使用别名 FlatMap
来使用 flatMap。
RxJS v5.5.2 is the default dependency version for Angular 5.
对于您导入的每个 RxJS 运算符,包括 mergeMap
,您现在应该从 'rxjs/operators' 导入并使用管道运算符。
在 Http 请求 Observable 上使用 mergeMap 的示例
import { Observable } from 'rxjs/Observable';
import { catchError } from 'rxjs/operators';
...
export class ExampleClass {
constructor(private http: HttpClient) {
this.http.get('/api/words').pipe(
mergeMap(word => Observable.of(word.join(' '))
);
}
...
}
注意这里 flatMap
替换为 mergeMap
并且 pipe
运算符用于以类似于您习惯的方式组合运算符带点链。
有关可出租运算符的详细信息,请参阅 rxjs 文档 https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md
快速更新 - 2019 年 5 月
使用 rxjs v6.5.1
作为 mergeMap
运算符导入,例如/
import { Observable, from, of } from "rxjs";
import { map, filter, mergeMap } from "rxjs/operators";
然后结合新的pipe
功能使用,eg/
var requestStream = of("https://api.github.com/users");
var responseStream = requestStream.pipe(
mergeMap(requestUrl => {
console.log(requestUrl);
... // other logic
return rp(options); // returns promise
})
);