Angular 5 将 Observable<obj> 转换为 obj
Angular 5 convert Observable<obj> to obj
我正在实施 resolve
方法:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Obj> | Obj {
return this.service.get(route.params['guid'])
.map((response: Json) => {
return this.service.list(response.data.id).map((response: Json) => {
return <Obj>response.data;
});
});
但是我有错误Can't convert to Observable<Observable<Obj>>
。
我该如何解决这个问题?
您不能将此 return 设为 Obj
,因为它是异步的。因此,它必须被解开。您可以使用 mergeMap
:
使其成为 Observable<Obj>
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Obj> {
return this.service.get(route.params['guid'])
.mergeMap((response: Json) => {
return this.service.list(response.data.id).map((response: Json) => {
return response.data;
});
map
中的结果已经是一个 Observable。试试这个:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Obj> | Obj {
return this.service.get(route.params['guid'])
.mergeMap((response: Json) => {
return this.service.list(response.data.id).map((response: Json) => {
return response.data;
});
});
编辑:@Rafael 是对的,您还必须使用 mergeMap
(如果您使用的 rxjs 版本 < 6,则使用 flapMap),我编辑了我的 post.
我正在实施 resolve
方法:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Obj> | Obj {
return this.service.get(route.params['guid'])
.map((response: Json) => {
return this.service.list(response.data.id).map((response: Json) => {
return <Obj>response.data;
});
});
但是我有错误Can't convert to Observable<Observable<Obj>>
。
我该如何解决这个问题?
您不能将此 return 设为 Obj
,因为它是异步的。因此,它必须被解开。您可以使用 mergeMap
:
Observable<Obj>
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Obj> {
return this.service.get(route.params['guid'])
.mergeMap((response: Json) => {
return this.service.list(response.data.id).map((response: Json) => {
return response.data;
});
map
中的结果已经是一个 Observable。试试这个:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Obj> | Obj {
return this.service.get(route.params['guid'])
.mergeMap((response: Json) => {
return this.service.list(response.data.id).map((response: Json) => {
return response.data;
});
});
编辑:@Rafael 是对的,您还必须使用 mergeMap
(如果您使用的 rxjs 版本 < 6,则使用 flapMap),我编辑了我的 post.