无法捕获来自mergeMap返回的可观察到的错误

时间:2019-05-09 12:43:10

标签: angular typescript rxjs

在我的路线防护中,我试图将需要按特定顺序完成的多个请求链接在一起,以确定是否允许用户查看路线。首先,我想获取userRegions,一旦完成,我就需要获取getReadWritePermissions,一旦完成,我将返回一个true或false的observable,这取决于是否允许该用户访问该路由。 getUserRegions和getWritePermissions都返回一个数组的Observable。

canActivate(): Observable<boolean> {
        return this.securityService
            .getUserRegions(this.authService.userName)
            .pipe(
                mergeMap((userRegions: Region[]) => {
                    this.regionService.setRegionList(userRegions);
                    return this.permissionsService.getReadWritePermissions(
                        this.authService.userName,
                        userRegions.map(r => r.regionId),
                        undefined
                    );
                }),
                catchError((regionsErr: any) => { // HERE I WANT TO CATCH ANY ERROR FROM getUserRegions()
                    debugger
                    return throwError(regionsErr);
                })
            )
            .pipe(
                map((regionPermissions: RegionPermission[]) => {
                    this.regionService.setRegionPermissionList(regionPermissions);
                    return regionPermissions.some(rp => rp.readWriteAccess.hasReadAccess || rp.readWriteAccess.hasWriteAccess);
                }),
                catchError((permissionsErr: any) => { // HERE I WANT TO CATCH ANY ERROR FROM getReadWritePermissions()
                    debugger
                    return throwError(permissionsErr);
                })
            );
    }

发生的事情是,我永远无法捕获来自getReadWritePermissions()调用的错误。仅当第一个catchError中引发错误时,才会命中第二个catchError断点。我认为这很有意义,但是我不知道如何解决从getReadWritePermissions()中捕获任何错误的问题。路由防护器可以按预期工作,所以这不是问题。只是getReadWritePermissions()方法调用了API,并且如果api响应为404、401等(例如错误),我希望能够捕获到这一点。

这里到底发生了什么?内在可观察的是哪一个,外在可观察的是哪一个?为什么我不能从mergeMap捕获返回的observable的错误,我该怎么做呢?

0 个答案:

没有答案