[英]How can I create a wait-until-response-come-back system in JS?
这是我的代码:
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({
系统?
注意:另外,我确定数据(响应)也将被返回。 因为我已经在UserAccountLogin
服务中添加了console.log()
,它也会在大约2秒钟后打印返回的数据。
我认为您错过了take方法,这会触发根函数takeLatest(“ LOGIN”,login)中的调用,类似这样
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.