Estoy tratando de escribir un código que ejecutará varias sagas de bloqueo en secuencia. Para mi caso de uso, saga1 debe completarse antes de que saga2 pueda comenzar a ejecutarse. Aquí hay un código que muestra una versión simplificada de lo que estoy tratando de hacer:
function* logger() { console.log('spy 1'); } function* logger2() { console.log('spy2'); } function* spy1() { yield takeEvery('*', logger); } function* spy2() { yield takeEvery('*', logger2); } export default function* rootSaga() { yield call(spy1); yield call(spy2); }Cuando envío una acción, solo llego al primer archivo console.log. Sé que si uso fork() en lugar de call() puedo hacer que ambos se ejecuten, sin embargo, no quiero que se ejecuten en paralelo. ¿Cómo puedo completar mi primera función de registrador y permitir que Saga pase a la segunda?
¡Gracias!
¿Qué hay de crear un solo observador que simule lo que hace takeEvery pero de manera secuencial?
function* logger() { yield delay(1000); console.log("logger 1"); } function* logger2() { console.log("logger 2"); } function* watcher() { while (yield take("*")) { yield call(logger); yield call(logger2); } } function* rootSaga() { yield call(watcher); } Uno de los puntos que me gustaría mencionar aquí es que, en primer lugar, takeEvery usa una fork interna y luego, de acuerdo con la documentación de takeEvery :
No hay garantía de que las tareas terminen en el mismo orden en que se iniciaron.
así que tal vez usar takeEvery no logre lo que necesita.