En el espacio de trabajo, mis colegas me dijeron que debo, en lugar de escribir esto
import store from './store.ts' // Epic code ... mergeMap(data => { store.dispatch(someActionCreator(data)) return EMPTY }) ...debería escribir algo como esto
// Epic code ... mergeMap(data => { return of(someActionCreator(data)) }) ...Sé que todas las acciones que están escritas en el operador rxjs se envolverán automáticamente en la función de envío y se enviarán automáticamente, pero ¿por qué es malo enviar todas las acciones como en el primer ejemplo?
Sí, no devolveremos ningún flujo $, pero si es una última iteración en secuencia, ¿realmente necesitamos devolver este flujo $ en lugar de enviarlo manualmente?
Se considera una buena práctica no causar "efectos secundarios" en la mayoría de los operadores. Los efectos secundarios se pueden describir como declaraciones que modifican/mutan el estado en algún lugar "fuera" de la cadena del Operador.
Con la llamada de dispatch , provocas directamente la mutación de estado, lo que puede considerarse un efecto secundario.
Hay muchas opiniones de por qué se deben evitar los efectos secundarios. Puedo citar algunos:
Por cierto, el origen de todo el patrón de operador es la programación funcional, donde técnicamente no sería posible una llamada como la que estás describiendo.
Así que creo que la respuesta a su pregunta se basa principalmente en opiniones. Técnicamente, creo que no cambiará nada en su caso de uso. Además, los puntos mencionados anteriormente deben tomarse con pinzas, porque siempre causará efectos secundarios en algún lugar si se suscribe, por ejemplo, a una API HTTP en mergeMap .