dva.js(and design)实现dispatch的回调函数

Song4262 次浏览0个评论2018年07月23日

一、在dispatch中使用callback

dva@2中实现回调可以将回调函数作为参数dispatch

dispatch({
   type: 'model/fetch',
   payload: {
      resolve,
      id: userId,
   },
   callback: res => {
      console.log(res);
   }
})

然后在modeleffects中这样写:

*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);
})

然后在modeleffects中这样写:

...

*fetch({ payload }, { call }) {
  const { resolve } = payload;
  const { data } = yield call(services.fetch, payload);
  if (data.code === 0) {
    // 通过resolve返回数据,返回的数据将在Promise的then函数中获取到
    !!resolve && resolve(data.data);
}

提交评论

请登录后评论

用户评论

    当前暂无评价,快来发表您的观点吧...

更多相关好文

    当前暂无更多相关好文推荐...