0

无法让 concatMap 对用户 ID 进行第一次查询,然后将该 ID 用于第二次查询。

这是文档如何解释其用法的方式,但似乎不存在证明这种工作的示例。

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+ 没有空返回检查。

4

2 回答 2

0

this.getUser(principal.id: String)似乎不是有效的打字稿语法,请尝试this.getUser(principal.id as string);如果类型Principal{id: string}定义,那么只需使用this.getUser(principal.id)

于 2018-12-16T23:09:45.940 回答
0
this.getUser(principal.id: String)

是一种无效的函数调用方式,你只在函数参数的定义中定义你的参数类型,而不是在调用函数的时候。

它应该是

this.getUser(principal.id)

此外,您的函数不会返回任何内容。

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

返回无效,您要么需要

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

或者

(principal: Principal) => {
  return this.getUser(principal.id: String)
}
于 2018-12-17T02:35:34.913 回答