Estoy en proceso de convertir algunas sagas a thunks. Algunas de estas sagas tienen funciones generadoras anidadas que no puedo llamar dentro de thunks. Normalmente en una saga hago:
const result = yield call(myFunction, anotherSaga, params);Sin embargo, cuando trato de convertir esto a thunk como:
export const myAction = createAsyncThunk( 'myAction', async (data: Payload, { dispatch, getState }) => { const result = myFunction(anotherSaga, params).next().value; console.log(result) }) console: @@redux-saga/IO: true combinator: false payload: {context: null, args: Array(2), fn: ƒ} type: "CALL" No obtengo nada utilizable ya que anotherSaga tiene sagas anidadas. ¿Cómo puedo convertir esto en una función thunk?
No se puede llamar directamente a saga desde un thunk, los efectos que usan las sagas deben ser procesados por la biblioteca de saga.
Algunas posibles soluciones:
a) Convertir incluso la saga anidada en función no generadora
b) Si el resultado no es importante, puede reemplazar la call con un envío y luego usar el efecto takeEvery para llamar a la saga cuando se envíe dicha acción.
c) No recomendaría esto, pero técnicamente es posible ejecutar la saga usando la instancia de middleware de saga.
export const myAction = createAsyncThunk( 'myAction', async (data: Payload, { dispatch, getState }) => { const task = sagaMiddleware.run(anotherSaga, params) const result = await task.toPromise() console.log(result) })