Вот мой код:
import { routerRedux } from 'dva/router';
import { stringify } from 'qs';
import { UserAccountLogin, getFakeCaptcha } from '@/services/api';
import { setAuthority } from '@/utils/authority';
import { getPageQuery } from '@/utils/utils';
import { reloadAuthorized } from '@/utils/Authorized';
export default {
namespace: 'login',
state: {
status: undefined,
},
effects: {
*login({ payload }, { call, put }) {
const response = yield call(UserAccountLogin, payload);
yield put({
type: 'changeLoginStatus',
payload: response,
});
},
},
reducers: {
changeLoginStatus(state, { payload }) {
console.log(payload); -- undefined
setAuthority(payload.currentAuthority);
return {
...state,
status: payload.status,
type: payload.type,
};
},
},
};
Как я прокомментировал в приведенном выше коде, очевидно, что console.log()
будет выполняться в качестве первой строки, поэтому он всегда выдает undefined
.
Насколько я знаю о dva, сначала выполняется effects
, а затем передает ответ на reducers
.Но мой код не ждет, пока ответ не вернется.В любом случае, как мне сделать ожидание, пока const response = yield call(UserAccountLogin, payload);
закончится и они выполнят yield put({
систему?
Примечание: Также я уверен, что данные (ответ)будут также возвращены.Потому что я добавил console.log()
внутри UserAccountLogin
службы, и она будет печатать возвращенные данные примерно через 2 секунды.