Мой поток адаптационный пользователь:Как заблокировать временные блокировки изменений маршрута реактивного маршрутизатора в Redux-Saga?
- аутентификации пользователя через Google & попадает
isRegistrationDone: false
- пользователь подтверждает информацию о профиле, щелкает
save
save
бросаетredux action REGISTRATION_COMPLETE
, наборы профилей дляisRegistrationDone: true
В мой sagas
, я проверяю флаг isRegComplete: false
. если он обнаружен, я хочу, чтобы все изменения маршрута пользователю перенаправлять /reg
function* fetchUserProfile(action) {
const { uid } = authUser
const path = getRootPath('userProfiles')
let userProfile = // retrieve from database
if (userProfile.isRegistrationDone === false) {
browserHistory.push('/reg')
yield call(watchRouteChanges)
let confirmedUserInfo = yield take(REGISTRATION_COMPLETE)
// ... write to database
yield cancel(watchRouteChanges)
}
browserHistory.push('/dash')
}
function* watchRouteChanges() {
fork(takeEvery, LOCATION_CHANGE, redirectToRegistration)
return
}
function redirectToRegistration(action) {
const destination = action.payload.pathName
if (destination !== '/reg') browserHistory.push('/reg')
return
}
это работает не hunky-dory
до yield cancel(watchRouteChanges)
, который бросает:
utils.js:191 uncaught at sagas
at takeEvery
at fetchUserProfile
Error: cancel(task): argument function watchRouteChanges() {
return _regenerator2.default.wrap(function watchRouteChanges$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
(0, _effects.fork)(_reduxSaga.takeEvery, _location.LOCATION_CHANGE, redirectToRegistration);
return _context2.abrupt('return');
case 2:
case 'end':
return _context2.stop();
}
}
}, _marked[1], this);
} is not a valid Task object
(HINT: if you are getting this errors in tests, consider using createMockTask from redux-saga/utils)
at cancel (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:27590:12)
at fetchUserProfile$ (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:27992:39)
at tryCatch (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:26312:41)
at Generator.invoke [as _invoke] (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:26586:23)
at Generator.prototype.(anonymous function) [as next] (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:26345:22)
at next (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:28480:28)
at Object.currCb [as cont] (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:28554:8)
at end (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:28521:24)
at Object.task.cont (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:28331:12)
at next (http://192.168.0.103:3000/app.1b8181c5bf9c72be8a4e.js:28490:36)log @ utils.js:191end @ proc.js:299abort @ proc.js:95task.cont @ proc.js:108end @ proc.js:305abort @ proc.js:95task.cont @ proc.js:108end @ proc.js:305abort @ proc.js:95task.cont @ proc.js:108next @ proc.js:281currCb @ proc.js:338end @ proc.js:305task.cont @ proc.js:115next @ proc.js:274currCb @ proc.js:338checkEffectEnd @ proc.js:579chCbAtIdx @ proc.js:594currCb @ proc.js:338
Логика Перенаправление кажется, работает хорошо, но я, конечно, нужно чтобы отменить его, чтобы этот процесс работал.
Есть ли лучший способ сделать это? или ошибка в моем подходе?