Функция, которая возвращает логическое значение с вложенной подпиской - PullRequest
0 голосов
/ 24 октября 2018

У меня есть ряд mat-chexboxes, которые создаются с помощью цикла ngFor.

   <div class="permission-one" *ngFor="let permission of permissions">
    <mat-checkbox [disabled]="(!isEdit && userIndex !== i) || (isEdit && userIndex !== i)" [checked]="isChecked(fauxUser.userId, permission)" (change)="checkboxSelected($event, permission.code)"></mat-checkbox>
  </div>

Чтобы увидеть, нужно ли устанавливать этот флажок при создании, я вызываю isChecked (), который выглядит следующим образом:

isChecked(userId: number, permission: Permission): boolean {
 this.adminService.getUserAccess(this.companyId, userId)
 .subscribe((userAccessRes: UserPermission) => {
   for (const special of userAccessRes.specialPrograms) {
    if(special.programCode === permission.code && special.userAccessId !==0) 
      {
        return true;
      } else {
        return false;
      }
    }
  });
}

Однако из-за вложенности с подпиской я не могувыяснить, как вернуть возвращаемое значение оператора if на соответствующий уровень, чтобы вернуть его для функции.Прямо сейчас моя ошибка: «Функция, объявленный тип которой не является ни void, ни any, должна возвращать значение».Можно ли использовать функцию, которую я имею для моей желаемой функциональности?любые советы / предложения будут высоко ценится

1 Ответ

0 голосов
/ 24 октября 2018

Вы не можете вернуть логическое значение напрямую (ваш оператор return находится в обратном вызове подписки, а не в самом методе компонента), вам нужно вернуть еще один Observable, используя оператор map RxJS ииспользуйте async трубу с вашей точки зрения:

Сторона сценария :

import {Observable} from 'rxjs';
import {map} from 'rxjs/operators';

// ...

isChecked(userId: number, permission: Permission): Observable<boolean> {
  return this.adminService.getUserAccess(this.companyId, userId).pipe(
    map((userAccessRes: UserPermission) => {
      // test your permission here and return true or false
    })
  );
}

Просмотр стороны :

<mat-checkbox [checked]="isChecked(fauxUser.userId, permission) | async"></mat-checkbox>

Примечание : вызов методов компонента в директивах, таких как *ngIf, иногда считается плохой практикой, поскольку это может привести к проблемам с производительностью.По возможности используйте вычисленные свойства.

...