В приложении React я не понимаю, почему строка доходности в функции генератора не «ждет»? В частности, в функции LOGIN, приведенной ниже, я ожидаю, что линия Yield будет следовать сразу за console.log («Шаг 3») до pause до ее завершения; однако это НЕ делает паузу и Шаг 8 немедленно обрабатывается. Я ожидаю, что ШАГИ в console.log будут следовать логическому порядку номеров. Фактический порядок, который распечатывается в окне консоли браузера: 1,2,3,8,9,10,4,5,6,7 . Может кто-нибудь объяснить, почему он НЕ делает паузу?
export function* LOGIN({ payload }) {
const { email, password } = payload
yield put({
type: 'user/SET_STATE',
payload: {
loading: true,
},
})
let userCog
try {
console.log("Step 1")
userCog = yield call(login, email, password)
console.log("Step 2")
} catch (err) {
if (err.code === 'UserNotConfirmedException') {
yield put({
type: 'user/SET_STATE',
payload: {
loading: true,
email,
},
})
yield history.push('/system/verification')
}
}
console.log("Step 3")
yield put({
type: 'user/LOAD_CURRENT_ACCOUNT',
})
console.log("Step 8")
if (userCog) {
console.log("Step 9")
yield history.push('/dashboard/analytics')
console.log("Step 10")
}
}
export function* LOAD_CURRENT_ACCOUNT() {
yield put({
type: 'user/SET_STATE',
payload: {
loading: true,
},
})
console.log("Step 4")
const response = yield call(currentUser)
console.log("Step 5")
if (response) {
const { username } = response
yield put({
type: 'user/SET_STATE',
payload: {
id: '123',
name: 'Administrator',
email: username,
role: 'admin',
authorized: true,
},
})
}
console.log("Step 6")
yield put({
type: 'user/SET_STATE',
payload: {
loading: false,
},
})
console.log("Step 7")
}
РЕДАКТИРОВАТЬ: Вот отправка редукса из компонента пользовательского интерфейса входа
onSubmit = event => {
event.preventDefault()
const { form, dispatch } = this.props
form.validateFields((error, values) => {
if (!error) {
dispatch({
type: 'user/LOGIN',
payload: values,
})
}
})
}