Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Observable中包装事件处理程序回调_Javascript_Typescript_Rxjs_Observable - Fatal编程技术网

Javascript 在Observable中包装事件处理程序回调

Javascript 在Observable中包装事件处理程序回调,javascript,typescript,rxjs,observable,Javascript,Typescript,Rxjs,Observable,我试图找到一种模式,将事件回调从库包装到RxJS可观察对象 const resultCallback = (result) => {}; // not hyper clear on the point of this const events$ = fromEventPattern( (handler) => Library.addHandler('SOME_EVENT', handler, resultCallback), (handler) => Library.

我试图找到一种模式,将事件回调从库包装到RxJS可观察对象

const resultCallback = (result) => {}; // not hyper clear on the point of this

const events$ = fromEventPattern(
  (handler) => Library.addHandler('SOME_EVENT', handler, resultCallback),
  (handler) => Library.removeHandler('SOME_EVENT', handler, resultCallback);
);
我正在使用的库为以下事件注册处理程序:

constsomehandler=(args)=>{}`;
const resultCallback=(result)=>{}`;
addHandler('SOME_EVENT',someHandler,resultCallback);
removeHandler('SOME_EVENT',someHandler,resultCallback);
resultCallback
是一个回调函数,如果处理程序注册成功,则返回该回调函数


理想情况下,我希望将处理程序作为函数的参数传入,并发出它的结果

我不知道如何从这个函数中发出处理程序的值,同时维护对处理程序的对象引用以进行删除

addEventHandlerObservable(处理程序:any):可观察{
返回新观察值(观察者=>{
addHandler('SOME_EVENT',handler,
(结果)=>{
//注册成功了吗?
if(result.failed){
observer.error();
observer.complete();
}
});
});
}

rxjs已经为您完成了这项工作,可以观察到来自EventPattern的

const resultCallback = (result) => {}; // not hyper clear on the point of this

const events$ = fromEventPattern(
  (handler) => Library.addHandler('SOME_EVENT', handler, resultCallback),
  (handler) => Library.removeHandler('SOME_EVENT', handler, resultCallback);
);
你不能在这里“传递”处理程序。您的订阅是您的处理程序:

events$.subscribe((val) => someHandler(val));

@AluanHaddad
fromEvent
仅对特定事件目标有效。这不是其中之一。谢谢,“您不传入”是它单击的位置。“resultCallback”是对实际注册处理程序的结果的异步回调,因为在某些情况下它可能会失败,而这就是库返回结果的方式。因此,我需要在它发生的情况下取消订阅。在这种情况下,我会说使该函数类似于
(result)=>{if(result.failed){throw new Error('event registration failed!');}}
,这应该会导致可观察对象出错谢谢,抛出错误不会完成可观察对象。但是如果takeWhile()失败了,我可以用一个标志来引导它。是的,如果你的目标是完成,那就行了。我只是想在失败的案例中,您可能希望它转到错误处理程序