使用 angular http 调用并将结果传递给订阅者的正确方法

Correct way to work with angular http calls and pass results to subscriber

我想通过我的应用程序中的服务发出请求。我想像往常一样将订阅传递给调用者,但我也希望能够拦截结果,对其进行操作但不更改它,然后继续。

例如:

return this.http.get<LicenseKeyAndUsageModel>('api/license')
    .map(data => {
        this.hasValidLicenseKeyInternal.next(!data.isExpired);
        return data;
    })
    .catch((error: HttpErrorResponse) => {
        if (error.status === 404) {
            this.hasValidLicenseKeyInternal.next(false);
            return Observable.throw(new LicenseKeyMissingError());
        }
        else
            return Observable.throw(error);
    });

所以在这种情况下,我正在检索当前的许可证密钥,并更新关于许可证密钥是否有效的服务级别值,并将结果传递给原始订阅者。

基本上这看起来是正确的方法吗?或者我应该做更多的事情 'Observable-y' 比如多播或其他什么?

这就是 do() 运算符(或 RxJS 5.5 中的 tap())的目的。

的确,您也可以为此使用 map(),但您需要记住始终 return 原始值。此外,您想要的似乎是 "side-effect"(您想执行影响可观察链之外的应用程序状态的操作),这就是 do() 的目的。

Rxjs tap 就是你想要的。

查看this更多信息。

很抱歉没有发布一个访问彻底移动的大答案。