How to catch an error on a Request, then open a modal, then retry when modal closes with RxJS

前端 未结 3 827
盖世英雄少女心
盖世英雄少女心 2021-02-04 14:12

I want to make a call to a server that can return an authorization fail (401) with Angular2\'s HTTP class.

The flow of the request should look like that:

  • T
3条回答
  •  南旧
    南旧 (楼主)
    2021-02-04 14:31

    I think that you need to return something an observable even in the case of the 401 error:

    public errorHandler(res: Response, ob: Observable): Observable {
        if (res.status === 401) {
            let closedSubject = new Subject();
            this.modalService.open(new ModalConfig({
                content: LoginModalComponent,
                close: () => {
                  closedSubject.next();
            }));
            return ob.retryWhen(() => closedSubject);
        }
        else {
            return Observable.throw(res.json());
        }
    }
    

    See this article for more details: https://jaxenter.com/reactive-programming-http-and-angular-2-124560.html.

    Edit

    The problem is that the second parameter of the catch callback isn't the source observable. This source observable corresponds to the value of its source property:

    return ob.source.retryWhen((errors) => closedSubject);
    

    See the working plunkr: https://plnkr.co/edit/eb2UdF9PSMhf4Dau2hqe?p=preview.

提交回复
热议问题