【问题标题】:Returning observable inside subscribe method在 subscribe 方法中返回 observable
【发布时间】:2019-08-15 16:26:43
【问题描述】:

我正在尝试编写一个访问 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。现在不是这样。

是否可以将两个 observable 结合起来,以便我的方法可以返回一个组合的 observable?

【问题讨论】:

标签: node.js angular typescript observable httpclient


【解决方案1】:

您应该为此使用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。然后你在你需要的地方订阅它。

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 2018-08-06
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多