返回内部可观察的订阅方法

时间:2019-08-15 16:26:43

标签: node.js angular typescript observable httpclient

我正在尝试编写访问Spotify api的服务。因此,此服务需要授权承载令牌。它应该从另一个服务获得此服务,该服务返回一个可观察值。如何将它们放在一起?

我的第一次尝试是这样的:

getSpotifyData(spotifyId: string): Observable<string> {
    let url = "https://api.spotify.com/v1/tracks/" + spotifyId;

    this.config.getSpotifyToken().subscribe(bearer => {
        return this.http.get<string>(url, {headers: {"Authorization": "Bearer " + bearer}});
    });
}

这里的问题是,无论配置服务是否起作用,此方法都必须返回Observable。现在不是这种情况。

是否可以将两个可观察的对象合并在一起,以便我的方法可以返回一个合并的可观察的对象?

1 个答案:

答案 0 :(得分:4)

您应该为此使用switchMap()

getSpotifyData(spotifyId: string): Observable<string> {
    let url = "https://api.spotify.com/v1/tracks/" + spotifyId;

    return this.config.getSpotifyToken().pipe(
        switchMap((bearer: string) => {
            return this.http.get<string>(url, {headers: {"Authorization": "Bearer " + bearer}});
        }),
    );
}

在这种情况下,您将获得承载,然后在switchMap函数中使用它,整个getSpotifyData()函数将返回一个Observable。然后,在需要的地方订阅它。