Я использую ngx-permissions для обработки разрешений в моем приложении Angular 6.Я хотел бы проверить разрешения пользователя перед извлечением данных из конечной точки.Ngx-permissions предоставляет способ проверить разрешение пользователя в методе hasPermission (licenseName).Это возвращает обещание.Я хотел бы получить данные из конечной точки, используя Observable, поскольку я прочитал, что это угловой способ сделать что-то.Однако я не уверен, как объединить Обещание из проверки разрешения и метода Observable.
Служба:
getData(): Observable<Item[]<>>{
this.permissionsService.hasPermission(Permission.CanViewData)
.then(hasPermission => {
if (hasPermission) {
return this.http.get<Item[]>('http://endpoint/getdata', httpOptions).pipe(
map(this.extractData), // this is calculated too late
catchError(e => this.handleError(e, 'GetData', new Observable<Item[]>()))
);
}
});
return new Observable<Item[]>(); // this is always passed to the component
}
Компонент:
getData(): void {
this.service.getData().subscribe(data => {
this.data = data
});
}
Я понимаю,Я не вызываю метод hasPermission правильно, так как мой код всегда падает до окончательного return new Observable<Item[]>();
.Однако данные извлекаются из моей конечной точки - если я добавлю console.log, я вижу результат map(this.extractData)
.Просто рассчитывается слишком поздно.Компонент уже перешел и использует пустой Item[]
.
Как я могу использовать permissionsService.hasPermission из ngx-permissions, чтобы проверить разрешение пользователя, прежде чем пытаться получить данные и при этом вернутьНаблюдаемый моим компонентом?