Files
planka/client/src/sagas/core/request.js
2022-04-26 18:01:55 +05:00

32 lines
717 B
JavaScript
Executable File

import { call, fork, join, put, take } from 'redux-saga/effects';
import { logout } from '../../actions';
import ErrorCodes from '../../constants/ErrorCodes';
let lastRequestTask;
function* queueRequest(method, ...args) {
if (lastRequestTask) {
try {
yield join(lastRequestTask);
} catch {} // eslint-disable-line no-empty
}
try {
return yield call(method, ...args);
} catch (error) {
if (error.code === ErrorCodes.UNAUTHORIZED) {
yield put(logout()); // TODO: next url
yield take();
}
throw error;
}
}
export default function* request(method, ...args) {
lastRequestTask = yield fork(queueRequest, method, ...args);
return yield join(lastRequestTask);
}