可观察到流冗余上的重复操作



当我订阅套接字io事件时,我得到了重复的操作触发。

const onStartGameActionEpic = (action$, state$) => action$.pipe( ofType(ON_START_GAME), mergeMap(() => fromEvent(socket, 'newGameCreated').pipe( map(response => onStartGameFulfilled(response)), ), ), );

每次ON_START_GAME发生时,您都会创建一个新的侦听器,但您永远不会扼杀旧的侦听器。这就是问题的根源。

修复1

mergeMap更改为switchMap

修复2

您可能希望同时进行多个游戏。如果是,请为ON_START_GAME动作指定一个namespace道具。当游戏结束动作触发时,杀死特定的可观察对象。

const onStartGameActionEpic = (action$, state$) =>
action$.pipe(
ofType(ON_START_GAME),
mergeMap(onStartGameAction =>
fromEvent(socket, 'newGameCreated').pipe(
takeUntil(action$.pipe(
ofType(ON_END_GAME),
filter(onEndGameAction => (
endGameAction.namespace === startGameAction.namespace
)),
)),
map(response => onStartGameFulfilled(response)),
),
),
);

最新更新