rxjs: возвращаемое значение с pipe (map) - PullRequest
0 голосов
/ 16 мая 2018

Как вернуть значение при использовании трубы и карты, как в этом сценарии:

return this.service.someEvent().pipe(
  map(x => {
    return this.service.someValue;
  })
)

, но значение никогда не возвращается, так как никогда не добавляется к событию, если я использую его следующим образом:

const a = this.service.someEvent().pipe(
  map(x => {
    return this.service.someValue;
  })
)

return a.subscribe();

я получаю сообщение об ошибке (я знаю, что это неправильно).

TS2322: Type 'Subscription' is not assignable to type 'boolean | Observable<boolean> | Promise<boolean>'.   Type 'Subscription' is not assignable to type 'Promise<boolean>'.     Property 'then' is missing in type 'Subscription'.

Так что мне нужен способ вернуть значение.

ОБНОВЛЕНИЕ: лучшее описание (янеобходимо продублировать этот код с последней версией rxjs):

canActivate(next: ActivatedRouteSnapshot,
               state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
  return this.service.something().map(x => {
    if (x) {
      return true;
    } else {
      return false;
    }
  })

}

нужно сделать это с картой внутри канала (как я понял).

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете просто возвратить саму наблюдаемую от охраны canActivate: -

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
  return this.service.something().pipe(map(x => {
    if (x) {
      return true;
    } else {
      return false;
    }
  }));
}

Маршрутизация будет продолжена только после того, как возвращаемая наблюдаемая будет завершена, и ее излученное значение будет истинным. Так что вам на самом деле не нужно беспокоиться о подписке на этот наблюдаемый угловой маршрутизатор, который справится с этим самостоятельно.

...