这是我的代码:
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
。
据我所知,首先要执行effects
,然后将响应传递给reducers
。但是我的代码不会等到响应返回。无论如何,我如何才能等到const response = yield call(UserAccountLogin, payload);
完成并执行yield put({
系统?
注意:另外,我也肯定会返回数据(响应)。因为我在console.log()
服务中添加了UserAccountLogin
服务,它也会在大约2秒钟后打印返回的数据。
答案 0 :(得分:0)
我认为您错过了take方法,这会触发根函数中的调用 takeLatest(“ LOGIN”,登录) 像这样的东西