Javascript RxJS通过fromEventPattern中的NodeEventHandler抛出错误

Javascript RxJS通过fromEventPattern中的NodeEventHandler抛出错误,javascript,rxjs,Javascript,Rxjs,如果我使用的是fromEventPattern,并且自定义API有一个单独的错误处理程序,那么如何通过处理程序函数(NodeEventHandler)将它们抛出到流中 我可以调用带有错误的处理程序(如上所述),然后通过管道传递从EventPattern返回的结果observable,以检查类型,但这似乎有点冗长: pipe( map((x: unknown) => { if (x instanceof Error) throw x; return

如果我使用的是fromEventPattern,并且自定义API有一个单独的错误处理程序,那么如何通过处理程序函数(NodeEventHandler)将它们抛出到流中

我可以调用带有错误的处理程序(如上所述),然后通过管道传递从EventPattern返回的结果observable,以检查类型,但这似乎有点冗长:

pipe(
      map((x: unknown) => {
        if (x instanceof Error) throw x;
        return x;
      }),
subject
(我试图用eventpattern中的
替换它)有一个特定的
.error()
方法。这将避免所有的手动管道和类型检查

试试这个包装器

const yourEventObservable=new Observable(obs=>{
  const token=someAPI.registerEventHandler(res=>{
    if (res instanceof Error) 
       obs.error(x);
     obs.next(res)
  })
  return ()=>someAPI.unregisterEventHandler(token);
}).pipe(share())

您可以创建自己的observable来包装eventListeners,而不是使用fromEventPattern,这将是easier@FanCheung然后我必须手动管理取消订阅、共享、,惰性订阅等。据我所知,这是fromEventPattern的预期用途。我不确定fromEventPattern是否提供了错误处理接口,但我想说,你可能会编写更多代码来适应这种方法。退订很简单,只需返回一个函数,共享只需添加一个共享operator@FanCheung请你举个简单的例子好吗?我看不出它怎么会比上面的短得多…谢谢,长度上没有太大的差异,也不需要外部的映射。我将花一点时间看看是否有人可以在fromEventPattern中找到隐藏的API,或者将此标记为答案。
const yourEventObservable=new Observable(obs=>{
  const token=someAPI.registerEventHandler(res=>{
    if (res instanceof Error) 
       obs.error(x);
     obs.next(res)
  })
  return ()=>someAPI.unregisterEventHandler(token);
}).pipe(share())