请问大佬们,DvaJS怎么控制Model中Effect的执行顺序?
最近在做一个基于AntD Admin的项目,在开发中遇到一个问题,不知道怎么控制Effect的执行顺序。
当第一次进入或刷新 /index
这个页面的时候,页面Model的 effect query
执行的时候,全局Model里面的 effect initUserInfo
还没执行完成,导致权限控制失效,不能判断当前用户是否可以访问 /index
页面。
以下为伪代码
models/app.js
import api from 'api';
const { initConfig, checkUser, loadPermissions } = api;
export default {
namespace: 'app',
subscriptions: {
setup({ dispatch }) {
dispatch({ type: 'initConfig' })
dispatch({ type: 'initUserInfo' })
}
},
effects: {
/* 加载项目配置 */
*initConfig({ payload }, { call, put }) {
let res = yield call(initConfig);
if (res.success) yield put({ type: 'xxx', { data: res.data } });
},
/* 获取用户信息及权限信息 */
*initUserInfo({ payload }, { call, put }) {
let { userId, token } = store.get('userInfo');
if (userId && token) {
let userRes = yield call(checkUser, { userId, token });
if (userRes.success) {
store.set('userInfo', userRes.data);
/* 加载用户权限信息 */
let res = yield call(loadPermissions, { userId });
if (res.success) store.set('permissions', res.data);
}
}
}
},
reducers: {
...
}
}
pages/index/model.js
import api from 'api';
const { pathToRegexp } = require('path-to-regexp');
const { getIndexPage } = api;
export default {
namespace: 'index',
subscriptions: {
setup({ dispatch, history }) {
history.listen((location) => {
if (pathToRegexp('/index').exec(location.pathname)) {
dispatch({ type: 'query', payload: { ...location.query } });
}
})
}
},
effects: {
/* 加载页面数据 */
*query({ payload }, { call, put }) {
let res = yield call(getIndexPage);
if (res.success) yield put({ type: 'xxx', { data: res.data } })
}
},
reducers: {
...
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论