RXJS基于另一个创建可观察的

时间:2018-06-25 14:51:00

标签: rxjs

代码如下:

getActiveUserShares(): Observable<UserTeamShare[]> {
    return this.userService
        .getActiveUser()
        .pipe(flatMap((user) => (user ? this.provider.getUserShares(user.id) : of([]))));
}

它抛出: ERROR TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable. 不知道为什么。 如何创建可观察到的东西,当第一件事发出时返回并基于第一个可观察到的东西?

1 个答案:

答案 0 :(得分:0)

如果this.provider.getUserShares(user.id)返回一个Observable<UserTeamShare[]>,则应将UserTeamShare[]作为subscription方法中定义的变量的类型。

例如,让我们考虑以下代码

getActiveUserShares() {
    return this.userService
        .getActiveUser()
        .pipe(flatMap((user) => (user ? this.provider.getUserShares(user.id) : of([]))));
}

getActiveUserShares().submit(data => // do stuff with data)

使用智能感知,您应该看到Typescript告诉您getActiveUserShares方法返回Observable<UserTeamShare[]>,而变量data的类型为UserTeamShare[]

在这种情况下,您应该可以像使用data实例数组那样使用UserTeamShare进行操作。并非如此,这意味着this.provider.getUserShares(user.id)不返回Observable<UserTeamShare[]>