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