Подробный пример RxJs concatMap, чтобы получить идентификатор пользователя, а затем запросить пользователя с ним - PullRequest
0 голосов
/ 15 декабря 2018

Возникли проблемы при получении concatMap для выполнения первого запроса для идентификатора пользователя, а затем использовать идентификатор для второго запроса.

Вот как документы объясняют его использование, но примеров, демонстрирующих эту работу, кажется, не существует.

this.authenticationService.currentUser.pipe(
    concatMap((principal: Principal) => {
        this.getUser(principal.id: String)
    })
).subscribe((user: User) => {
    console.log(user);
});

В VSC это все красное.

[ts]
Argument of type '(principal: Principal) => void' is not assignable to parameter of type '(value: Principal, index: number) => ObservableInput<{}>'.
  Type 'void' is not assignable to type 'ObservableInput<{}>'. [2345]
(parameter) principal: Principal

Может ли кто-нибудь помочь мне разобраться в этом?Я полагаю, что это может быть из-за TS 2.7+, проверка нулевого возврата не выполняется.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018
this.getUser(principal.id: String)

Недопустимый способ вызова функции, вы определяете тип вашего параметра только в определении параметров функции, а не при вызове функции.

Это должно быть

this.getUser(principal.id)

Также ваша функция ничего не возвращает.

(principal: Principal) => {
  this.getUser(principal.id: String)
}

Возвращает void, вам нужно либо

(principal: Principal) => this.getUser(principal.id)

или

(principal: Principal) => {
  return this.getUser(principal.id: String)
}
0 голосов
/ 17 декабря 2018

this.getUser(principal.id: String) не похоже на правильный синтаксис машинописи, попробуйте this.getUser(principal.id as string);если тип Principal имеет определение {id: string}, просто используйте this.getUser(principal.id)

...