反应:Rxjs / Redux-Observable IE异常被抛出但未被捕获

时间:2018-07-24 07:57:38

标签: reactjs react-redux rxjs redux-observable

我有一些史诗代码。当我收到401错误时,应该调用一个回调函数并返回一个Observable流,它将弹出一个错误模式。在IE(Internet Explorer)以外的所有浏览器中均可使用。

这是我得到的错误:

error screenshot

我正在使用的相关依赖项的版本:

  • 反应:16.4.1
  • 反应区:16.4.1
  • react-redux:5.0.6
  • redux:3.7.2
  • 可观察到的Redux:0.17.0
  • redux-thunk:2.2.0
  • rxjs:5.5.6

以下是代码段:

export const epic = (action$) =>
  action$.ofType(SUBMIT)
    .mergeMap(action => {
        return Observable.ajax({
            url: `${Config.rootUrl}/${Config.apiContext.registration}/${Config.apiVersion}${Config.apiUri.captureField}`,
            method: 'POST',
            crossDomain: true,
            headers: {
                ...Config.headers,
                Authorization: `Bearer ${sessionStorage.getItem('token')}`,
                'Correlation-Id': getUuid(),
            },
            body: {
                saId: action.payload.args.field.replace(/[\s]/g, ''),
            },
        })
            .map((response) => {
                action.payload.callback(response);

                return {
                    type: CAPTURE,
                    payload: response,
                };
            })
            .catch(({ xhr }) => {
                // IE does not come in here at all when 401 error occurs, but works with error 400, 500, etc.
                action.payload.callback(xhr);

                return Observable.of(errorHelper(ERROR, xhr));
            });
    });

奇怪的是,当发生401错误时,IE根本不运行catch语句(如代码中所注释),但是在发生其他错误400、500等时,IE却不会运行。

我该如何调试呢?

0 个答案:

没有答案