Всем привет, продолжительное время не могу найти решение, прошу помощи у опытных!
Джун!)
Черт меня дернул по заданию PM подключил
redux-saga. Почитав несколько статей и просмотрев пару роликов подключил еще
connected-react-router в целом все устраивает, но есть одно но!
Подскажите как можно прервать запрос к RestAPI сделанный посредством axios?
У меня единый класс Api который хранит все методы для обращения к базе:
class Api {
constructor() {
this.client = axios.create();
this.token = localStorage.getItem('access_token');
this.refreshToken = localStorage.getItem('refresh_token');
this.refreshRequest = null;
this.client.defaults.baseURL = "http://127.0.0.1:8000/api/v1";
this.client.interceptors.request.use(
(config) => {
// ...code
);
this.client.interceptors.response.use(
(r) => r,
async (error) => {
// ... code
}
);
}
// пошли всевозможные методы
async checkClient(id, set) {...}
async getProfile(id) {...}
async editProfile(id, data) {...}
// ...
В саге у меня происходит запрос, который пока я не знаю как остановить при размонтировании компонента
// ... это то что я пробовал
function* fetchAllClients(token) {
const response = yield Api.getAllClients(token);
yield put(load_clients_all_done(response.data));
console.log('push')
}
export function* loadclientsPage() {
const cancelSource = axios.CancelToken.source()
try {
yield all([
call(fetchAllClients, cancelSource.token),
/// ...
]);
} catch(e){
yield put(load_clients_all_fail(e))
}
finally {
if (yield cancelled()) {
yield cancelSource.cancel()
}
}
}
export default function* clientsPageSagas() {
yield takeEvery(LOAD_CLIENTS_ALL, loadclientsPage);
};
Так же была подсказка с форума github
async getAllClients() {
const source = CancelToken.source()
const request = await this.client.get("/client/", {cancelToken: source.token});
request[CANCEL] = () => source.cancel();
return request;
}
Но к моему сожалению я так и не понял как сделать саму отмену ....