我正在使用一个 API,我在其中注册了一个经常发生的回调。
function myCallback(event) {
// do things with event, something computationally intensive
}
const something = createSomething({
onSomethingHappened: myCallback
})
我想限制触发此回调的速率,可能使用throttle。这个项目使用 Angular 来捆绑 rx。我如何调整我的代码,以便 myCallback
使用 rx 将其限制在 300 毫秒?
我对 observable 的工作原理有基本的了解,但弄清楚回调接口(interface)如何转换为 observable 接口(interface)有点令人困惑。
(根据答案进行编辑)
最佳答案
我认为你可以使用 fromEventPattern
:
let something;
const src$ = fromEventPattern(
handler => (something = createSomething({ onSomethingHappened: handler })),
);
src$.pipe(
throttleTime(300),
map(args => myCallback(args))
);
注意:这里假定 myCallback
是一个同步操作。
传递给 fromEventPattern
的第一个参数是 addHandler
。它还可以有 removeHandler
,您可以在其中放置拆卸逻辑(例如:从内存中释放、清空值等)。
为了更好地理解什么是handler
以及为什么要用它,让我们看看fromEventPattern
是如何实现的:
return new Observable<T | T[]>(subscriber => {
const handler = (...e: T[]) => subscriber.next(e.length === 1 ? e[0] : e);
let retValue: any;
try {
retValue = addHandler(handler);
} catch (err) {
subscriber.error(err);
return undefined;
}
if (!isFunction(removeHandler)) {
return undefined;
}
// This returned function will be called when the observable
// is unsubscribed. That is, on manual unsubscription, on complete, or on error.
return () => removeHandler(handler, retValue) ;
});
Source .
如您所见,通过 handler
,您可以在需要发出某些东西时让返回的可观察对象。
关于javascript - 使用 rxjs 限制回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62029663/