Angular 5将Observable <obj>转换为obj

时间:2018-10-30 15:04:33

标签: angular angular5 observable

我正在实现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>>

如何解决该问题?

2 个答案:

答案 0 :(得分:1)

因为它是异步的,所以不能使它返回Obj。因此,必须将其打开。您可以使用Observable<Obj>将其设置为mergeMap

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;
                });

答案 1 :(得分:0)

map中的结果已经是可观察的。试试这个:

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,则必须使用SurfaceView)。