您将如何订阅史诗?

How would you subscribe from an epic?

我有一个史诗,它通过管道将操作传送到表示 WebSocket 的主题中,如下所示:

const webSocketSendEpic = (action$, state$, { socket }) =>
  action$.ofType('SEND_MESSAGE')
    .pluck('payload')
    .subscribe(socket)

然而,这不是一部真正的史诗,因为它 returns 是 Subscription 而不是 Observable。我可以通过用一个块围绕它并返回 EMPTY 来规避它,但这感觉不正确。实现这样的目标的正确方法是什么?

您应该能够使用 do 而不是 subscribe 连接套接字,然后像对待任何其他史诗一样对待它:

const webSocketSendEpic = (action$, state$, { socket }) =>
  action$.ofType('SEND_MESSAGE')
    .pluck('payload')
    .do(socket)
    .ignoreElements();

并且您可以使用 ignoreElements 来防止史诗发射采摘的有效载荷。