TypeError («Супервыражение должно быть либо нулевым, либо функцией»)? Реагировать, api-call - PullRequest
1 голос
/ 05 мая 2020

Я создаю приложение React с клиентом Keycloak JS. Приложение My Keycloak хорошо инициировано и работает в контейнере docker. После подключения мне нужно выполнить некоторые действия.

файл: ContextAction. js

import Dispatch from '../framework/redux/Dispatch';

import ContextService from '../api-services/ff-api/Context';
export const setContext = (userId) => dispatch => {
    Dispatch.loading(dispatch, 'SET_CURRENT_USER');

    ContextService.getUser(userId)
        .then(user_response => {
            // Dispatch.done(dispatch, SET_CURRENT_USER_REQUEST, user_response);
            dispatch({
                type: SET_CURRENT_USER_SUCCESS,
                current_user: user_response.data
            });
        })
}

файл: api-services / ff-api / Context

import BaseService from '../BaseService';

class Context extends BaseService {
    constructor() {
        super();
        this.getUser = (userId) => {
            return this.serviceConnector().then((service) => { return service.callApi({ url: `users/${userId}` })});
        }
    }
}

const context = new Context();

export default context;

на BaseService, я хочу проверить, действителен ли токен, предоставленный Keycloak, иначе я хочу его обновить, а ЗАТЕМ выполнить вызов API

файл: BaseService. js

import ServiceConnector from './ServiceConnector'
import * as properties from '../app-config/properties'
import ApplicationStore from '../framework/redux/ApplicationStore'
import * as AuthorizationActions from '../actions/authorization_actions';

export default class BaseService {
    constructor() {
        this.serviceConnector = () => {
            const state = ApplicationStore.getState();
            const { keycloak } = state.authContext;

            // for every appi call we want to check the keycloak token 
            // if the token is expired (or nearly) we want to update it
            const getKeycloakPromise = () => new Promise((resolve, reject) => {
                if (keycloak.isTokenExpired() || keycloak.isTokenExpired(AuthorizationActions.TOKEN_REFRESH_RATE)) {
                    keycloak
                    .updateToken(AuthorizationActions.TOKEN_REFRESH_RATE)
                    .success(refreshed => {
                        if (refreshed) {
                            ApplicationStore.dispatch(AuthorizationActions.updateToken(keycloak.token));
                        } // else token still valid
                        resolve(keycloak.token)
                    })
                    .error(() => {
                        // eslint-disable-next-line no-console
                        console.error('Failed to retrieve an updated token or session has expired.');
                        ApplicationStore.dispatch(AuthorizationActions.logout({ now: true }));
                    });
                } else {
                    resolve(keycloak.token)
                }
            });
            const processKeycloakAsycn = async () => {
                return await getKeycloakPromise()
            };

            return processKeycloakAsycn().then((token) => {
                return (new ServiceConnector(properties.API_URL || '', token));
            }).catch((error) => {
                console.log('Error from processDataAsycn() with async( When promise gets rejected ): ' + error);
            });
        };
    }
}

на сервисном коннекторе, я установил ax ios и запустил вызов

Все в порядке, НО если я хочу вызвать другое действие, например getNotifications, я создал другой файл NotificationAction с тем же рабочим процессом и получаю эта ошибка

import setPrototypeOf from "./setPrototypeOf";
export default function _inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function");
  }

  subClass.prototype = Object.create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      writable: true,
      configurable: true
    }
  });
  if (superClass) setPrototypeOf(subClass, superClass);
}
  1 | import BaseService from '../BaseService';
  2 | 
> 3 | class Context extends BaseService {
  4 |   constructor() {
  5 |       super();
  6 |       this.getUser = (userId) => {

После поиска я обнаружил, что эта ошибка может быть связана с недоразумением по поводу импорта и наследования, но я не вижу никаких ошибок.

Я не Не понимаю, почему ... не могли бы вы мне помочь?

...