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

问题描述 投票:1回答:2

我想在我的应用程序中使用服务发出请求。我希望将订阅传递给调用者,这是通常的行为,但我希望能够拦截结果,对其采取行动但不改变它,并继续。

例如:

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”?

angular rxjs rxjs5
2个回答
4
投票

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

确实你可以使用map(),但你需要记住总是返回原始值。你想要的似乎也是一个“副作用”(你想要执行影响可观察链之外的应用程序状态的动作),这就是do()的用途。


1
投票

Rxjs tap就是你追求的。

查看this更多信息。

很抱歉没有发布通过手机访问的大答案。

© www.soinside.com 2019 - 2024. All rights reserved.