Почему Angular resolver НЕ возвращает никаких данных при возврате наблюдаемого использования of (), но возвращает при использовании of (). Pipe (delay (1000)) - PullRequest
3 голосов
/ 03 ноября 2019

Мой вопрос такой же, как и в заголовке. Я не совсем понимаю, почему Angular resolver НЕ возвращает (не разрешает) какие-либо данные, когда возвращаемый объект создается с использованием of([...someData]), но работает при использовании of([...someData]).pipe(delay(1000)

. Чтобы дать быстрый пример: resolver:

 resolve(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ):
    | Schedule.FetchAllSportTypesSuccess
    | Schedule.FetchAllSportTypesFailed
    | Observable<Schedule.FetchAllSportTypesSuccess | Schedule.FetchAllSportTypesFailed>
    | Promise<Schedule.FetchAllSportTypesSuccess | Schedule.FetchAllSportTypesFailed> 
    {

    this.store.dispatch(new Schedule.FetchAllSportTypes());

    const responseOK: Observable<Schedule.FetchAllSportTypesSuccess> = this.actions$.pipe(ofAction(Schedule.FetchAllSportTypesSuccess));

    const responseError = this.actions$.pipe(
      ofAction(Schedule.FetchAllSportTypesFailed),
      tap(() => this.router.navigate(['']))
    );

    return race(responseOK, responseError).pipe(first());
  }

метод this.store.dispatch(new Schedule.FetchAllSportTypes()) вызывает fetchAllSportTypes:

fetchAllSportTypes(): Observable<SportType[]>{

}

, когда реализация fetchAllSportTypes(): Observable<SportType[]> следующая, распознаватель НЕ возвращает никаких данных, он просто сохраняетожидание:

fetchAllSportTypes(): Observable<SportType[]>{
  return of([...someData])
}

, но при следующей реализации преобразователь работает должным образом:

fetchAllSportTypes(): Observable<SportType[]>{
      return of([...someData]).pipe(delay(1000))
    }
...