繁体   English   中英

Angular-RxJS-值为true时返回可观察到的

[英]Angular - RxJS - Return observable when a value is true

我有这个功能。 我想要这些行:

this.setHeaders(url);
return this.request(url, options);

this.refreshTokenService.wait === false时执行。

private catchErrors(url: string | Request, options?: RequestOptionsArgs) {

    return (res: Response) => {
        if (res.status === 401 || res.status === 403) {

            if (this.refreshTokenService.wait === false) {
                console.log('FIRST');
                this.refreshTokenService.wait = true;
                return this.refreshTokenService.refreshToken(localStorage.getItem('JWToken'))
                    .flatMap((result: any) => {
                        // if got new access token - retry request
                        localStorage.setItem('JWToken', JSON.parse(result._body).token);
                        this.setHeaders(url);
                        this.refreshTokenService.wait = false;
                        return this.request(url, options);
                    })
            } else {
                // TODO here
                this.setHeaders(url);
                return this.request(url, options);

            }
        } else {
            Observable.throw(res);
        }
    };
}

但是该函数只希望返回可观察到的或保证运行平稳。

谢谢

request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {

    if (typeof url === 'string') {
        if (!options) {
            options = {headers: new Headers()};
        }
        this.setHeaders(options);
    } else {
        this.setHeaders(url);
    }

    return super.request(url, options).catch(this.catchErrors(url, options));
}

在最后的else语句中,您需要返回可观察值。 所以代替

else {
        Observable.throw(res);
    }

您需要执行以下操作:

else {
        return Observable.throw(res);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM