Вот сценарий: существует файл с именем api.js
, в котором есть метод api()
для выполнения вызовов API.Есть еще один класс, называемый AutoLogout
, который имеет функцию для показа модолога автоматического выхода и выхода пользователя из системы через определенное время в случае отсутствия активности.Это прекрасно работает.
index.js
в ../services
export { default as api } from './api';
// export { api, onResponse } from './api'; tried this as well
export { default as userService } from './userService';
api.js
import userService from './userService';
export function onResponse(response) {
// returns response to calling function
return response;
}
async function api(options) {
const settings = Object.assign(
{
headers: {
'content-type': 'application/json',
'x-correlation-id': Math.random()
.toString(36)
.substr(2),
},
mode: 'cors',
credentials: 'include',
body: options.json != null ? JSON.stringify(options.json) : undefined,
},
options,
);
const response = await window.fetch(`/api/v0${options.endpoint}`, settings);
// calling onResponse() to send the response
onResponse(response);
if (response.status === 403) return userService.logout();
if (response.status > 299) throw new Error();
if (response.status === 204) return true;
return response.json ? response.json() : false;
}
export default api;
Теперь, в заголовке ответа я "x-expires-at "и я хочу использовать его в аутологе.Таким образом, при вызове API пользовательский токен сбрасывается.
auto-lougout.js
import { userService, api } from '../services';
// import { userService, api, onResponse } from '../services'; tried this as well
export default class AutoLogout {
constructor() {
super();
if (!userService.getUser()) userService.logout();
// here I am not able to call onResponse() from api.js
// getting response received from onResponse()
api.onResponse((resp) => { console.log(resp.headers.get('x-expires-at'))});
}
}
Попытка реализовать в качестве примера, приведенного в этой статье:
https://zpao.com/posts/calling-an-array-of-functions-in-javascript/
Здесь я не могу использовать export { api, onResponse };
, поскольку api
уже используется в нескольких местах во всем проекте.
Как мне позвонить onResponse
функция в одном файле js из другого класса в другом файле js? Правильно ли я здесь использую функцию обратного вызова?Если нет, то как правильно использовать обратный вызов в таком сценарии?