【问题标题】:Angular - RxJS - Return observable when a value is trueAngular - RxJS - 当值为真时返回可观察的
【发布时间】:2017-07-18 18:04:34
【问题描述】:

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

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

【问题讨论】:

  • this.request(url,options) 返回什么?
  • 另外,您能否具体说明您遇到的实际错误是什么?
  • 不是输出错误。在我获得新令牌之前,它会不断尝试运行以下请求。我想先获取新令牌,然后继续处理所有其他请求。
  • 我认为这个函数返回一个 observable。无论如何,我想在 this.refreshTokenService.wait === false 时返回这个函数
  • 我尝试了这个,但是没有用 return new Promise(function (resolve, reject) { resolve( this.request(url, options) ); });

标签: angular rxjs angular-observable


【解决方案1】:

在最后一个 else 语句中,您需要返回 observable。 所以不是

else {
        Observable.throw(res);
    }

你需要做的:

else {
        return Observable.throw(res);
    }

【讨论】:

  • 这条线我没有问题
猜你喜欢
  • 1970-01-01
  • 2020-06-24
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多