Saltar al contenido

Promesas en redux-saga

Solución:

¿Podría proporcionar más información sobre su problema? No estoy seguro de haber entendido correctamente su problema, pero la práctica común es:

API.js

function apiCallToFetchPost(id) {
  return Promise.resolve({name: 'Test});
}

postSaga.js

function* fetchPostSaga({id}) {
  try {
    const request = yield call(apiCallToFetchPost, id);
    // -> in post reducer we will save the fetched data for showing them later 
    yield put({type: FETCH_POST_SUCCESS, payload: request}); 
  } catch (error) {
    yield put({type: FETCH_POST_SUCCESS_FAILURE, error})
  }
}

export function* onBootstrap() {
  yield takeLatest(FETCH_POST, fetchPostSaga);
}

Hay un paquete que hace exactamente lo que solicitó el OP, es decir, organiza que dispatch() puede devolver una promesa: @ adobe / redux-saga-promise Al usarla, define un creador de “acción de promesa” a través de:

import { createPromiseAction } from '@adobe/redux-saga-promise'

export const fetchPostAction = createPromiseAction('FETCH_POST')

los dispatch() de una “acción de promesa” devolverá una promesa:

await dispatch(fetchPostAction({ id: 'post-id' }))

La saga podría verse así:

import { call, takeEvery }        from 'redux-saga/effects'
import { implementPromiseAction } from '@adobe/redux-saga-promise'

import { fetchPostAction } from './actions'

function * fetchPostSaga(action) {
  yield call(implementPromiseAction, action, function * () {
    const { id } = action.payload
    return yield call(apiCallToFetchPost, id)
  })
}

export function * rootSaga() {
  yield takeEvery(fetchPostAction, fetchPostSaga);
}

Resolverá la promesa con el valor devuelto por apiCallToFetchPost o rechazar si apiCallToFetchPost arroja un error. También despacha acciones secundarias con la resolución / rechazo a las que puedes acceder en un reductor. El paquete proporciona middleware que debe instalar para que funcione.

(Descargo de responsabilidad, soy el autor)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *