@Mr_FabiozZz
Начинающий фронтендер)

Как реализовать прерывание запроса axios из Redux-saga?

Всем привет, продолжительное время не могу найти решение, прошу помощи у опытных!
Джун!)
Черт меня дернул по заданию 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;
    }


Но к моему сожалению я так и не понял как сделать саму отмену ....
  • Вопрос задан
  • 576 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы