Angular - RxJS - 当值为true时返回observable

时间:2017-07-18 07:39:37

标签: angular rxjs angular-observable

我有这个功能。我想要这些内容:

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));
}

1 个答案:

答案 0 :(得分:0)

在你的最后一个else语句中,你需要返回observable。 而不是

else {
        Observable.throw(res);
    }

你需要这样做:

else {
        return Observable.throw(res);
    }