Dva: Intente admitir la promesa de devolución para el envío (EFFECT_ACTION)

Creado en 19 oct. 2016  ·  10Comentarios  ·  Fuente: dvajs/dva

Comentario más útil

@nickzheng prueba este método:

Utilice la promesa para envolver el envío en el componente, por ejemplo:

   new Promise((resolve, reject) => {
      dispatch({
         type: 'users/create',
         payload: {
             values,
             resolve,
             reject,
         },
      }); 
   })
   .then( res => {
      console.log(res);
   })
  .catch( err => {
      console.log(err);
  })

Y en el efecto de dva, puedes escribirlo así:

* create({ payload }, { put, call }) {
  const { value, resolve, reject } = payload;
  // 一些操作之后

  if (success) {
     resolve('done');
  } else {
     reject('error');
  }
}

La idea anterior de

Todos 10 comentarios

1. Si quiero integrar el cierre asincrónico, https://ant.design/components/modal-cn/#components -modal-demo-async, onOk debe aceptar una promesa en this.setState ({
visible: falso,
confirmLoading: falso,
});

Después de enviar una acción en dva,
envío({
tipo: 'usuarios / crear',
payload: valores,
}); El valor no es una promesa, sino una acción.

  1. La solución puede ser poner los estados visible y confirmLoading en la tienda.

    1. ¿Es posible que después de enviar una acción en dva, sea una promesa, y redux-thunk sea una promesa? Mi plato puede ser que la implementación de saga sea diferente.

@nickzheng prueba este método:

Utilice la promesa para envolver el envío en el componente, por ejemplo:

   new Promise((resolve, reject) => {
      dispatch({
         type: 'users/create',
         payload: {
             values,
             resolve,
             reject,
         },
      }); 
   })
   .then( res => {
      console.log(res);
   })
  .catch( err => {
      console.log(err);
  })

Y en el efecto de dva, puedes escribirlo así:

* create({ payload }, { put, call }) {
  const { value, resolve, reject } = payload;
  // 一些操作之后

  if (success) {
     resolve('done');
  } else {
     reject('error');
  }
}

La idea anterior de

https://github.com/dvajs/dva-core/blob/0fa6888/test/effects-test.js#L332 -L365, envío de soporte integrado (EffectAction) return Promise.

A @sorrycc le gusta uno, pregunte qué versión de esta función se agregó. ¿No parece ver el registro de cambios?

@daskyrk, etc. # 772

Es compatible con dva @ 2 .

Después del soporte incorporado para las promesas, ¿cómo definir resolver y rechazar en efecto?
¿Cómo contar como éxito, cómo contar como fracaso?
En la solución proporcionada por

   new Promise((resolve, reject) => {
      dispatch({
         type: 'users/create',
         payload: {
             values,
             resolve,
             reject,
         },
      }); 
   })
   .then( res => {
      console.log(res);
   })
  .catch( err => {
      console.log(err);
  })

¿La promesa incorporada significa convertir la parte superior en la parte inferior?

dispatch({
  type: 'users/create',
  payload: {
    values,
    resolve,
    reject,
  },
})
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.log(err);
  })

proyecto

const { dispatch } = this.props;
dispatch({
   type: 'specification/fetch',
    payload: applicationId,
 }).then((data) => {
     console.log(data)
 });

modelo

 effects: {
    * fetch({ payload }, { call, put, select}) {
      const response = yield call(querySpecification, payload);
      yield put({
        type: 'list',
        payload: response
      });
      return yield select(state => state.specification.list);  //important
    }
},
reducers: {
    list(state, action) {
      return {
        ...state,
        list: action.payload
      };
    }
  }

@Youthink Qué hacer en mi situación como a continuación

proyecto

this.props.dispatch({
    type: 'app/login',
    payload: {
        phone: '13312332131',
        smscode: '6666',
    }
}).then(data => {
    console.log('success result', data)
}).catch(err => {
    console.warn('error result', err)
})

modelo

*login({ payload }, { call, put }) {
    // 请求状态 fetching 为 true,方便页面显示loading状态
    yield put({ type: 'updateState', fetching: true })
    // 这里进行登录 service
    const login = yield call(authService.login, payload)
    // 如果上面的 authService.login 异常了,下面的逻辑就不会进行了,下面的 fetching 设置为 false 也不会执行到
    if (login) {
        yield put(NavigationActions.back())
        Storage.set('login', login)
    }
    // 这里重置下 状态 fetching 为 false
    yield put({type:'updateState', fetching: false })
},

Creo que no importa si el backend devuelve correctamente o si hay una excepción, se puede ejecutar en yield put({type:'updateState', fetching: false }) . Sé que es posible enviar un envío al modelo para configurar la recuperación en el proyecto, independientemente del éxito o el fracaso, pero no parece muy apropiado hacerlo.

¿Fue útil esta página
0 / 5 - 0 calificaciones