ngrx 中的效果不能订阅可观察的动作吗?

Can an effect in ngrx not subscribe to actions observable?

我有一个公开 webSocketSubject 的简单 angular10 服务,请参阅以下代码:


@Injectable({
  providedIn: 'root'
})
export class WebsocketService implements OnDestroy {
  private webSocketSubj : WebSocketSubject<User> //| Observable<Error>

  constructor() {
    this.webSocketSubj = webSocket("<some_url>")
    

  }

  ngOnDestroy(): void {
    this.webSocketSubj.complete()
  }

  getWebSocketSubject(): WebSocketSubject<User> {
    return this.webSocketSubj
  }

}

然后我将我的服务注入到一个效果中,每次在 websocket 上有新数据可用时都会发送一个更新操作。为此,我不需要订阅可观察的动作。这里有一些示例代码:


@Injectable()
export class EffectEffects {

  effect = createEffect(
     // Next line subscribe to my websocket subject, but not to the actions
    () => this.service.getWebSocketSubject().pipe(
        map(user => {
          return { type: '[Actions] Load Actionss Success', ...user }
        })
      )

  )

  constructor(private actions$: Actions, private service: WebsocketServiceService) {
  }

}

代码似乎工作得很好,但我对效果的理解是它们必须 监听每个动作并派发另一个动作,就像这个 example 中一样。

如果我的代码有问题或缺点,有人可以解释一下吗?

在此先感谢您的每一个提示,我只是希望对 ngrx 和 rxjs 有一个全面的了解。

虽然您可以以这种方式使用副作用,但我认为这不是正确的模式。副作用只是在调度不与状态交互的动作时应该发生的事情。根据定义,它们是操作的副作用。

我想说的是,您在此处创建的行为实际上应该在服务中实现,因为它不是由操作触发的。您的服务将订阅 WebSocket,然后在每次套接字发出时分派操作。