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.