一、在dispatch中使用callback
在dva@2中实现回调可以将回调函数作为参数dispatch:
dispatch({
type: 'model/fetch',
payload: {
resolve,
id: userId,
},
callback: res => {
console.log(res);
}
})
然后在model的effects中这样写:
*fetch({ payload, callback }, {call}) {
const response = yield call(services.fetch, payload);
if (response.code === 0) {
yield put({
type: 'reload',
payload: response,
});
if (callback) callback(response);
}
二、在dispatch中使用then
如果在dva@1中要实现回掉可以用Promise实现:
new Promise((resolve) => {
dispatch({
type: 'model/fetch',
payload: {
resolve,
id: userId,
}
})
}).then((res) => {
console.log(res);
})
然后在model的effects中这样写:
...
*fetch({ payload }, { call }) {
const { resolve } = payload;
const { data } = yield call(services.fetch, payload);
if (data.code === 0) {
// 通过resolve返回数据,返回的数据将在Promise的then函数中获取到
!!resolve && resolve(data.data);
}