【发布时间】:2020-04-21 16:02:53
【问题描述】:
在使用 RXJS 的 Angular 中,类中有以下代码:
static on = (event: string, callback: (e: any) => void) => {
switch (event) {
case EVENTS.CONNECT.ALIAS:
return emitter.subscribe(EVENTS.CONNECT.ALIAS, callback);
case EVENTS.DISCONNECT.ALIAS:
return emitter.subscribe(EVENTS.DISCONNECT.ALIAS, callback);
case EVENTS.BUTTON_PRESS.ALIAS:
return emitter.subscribe(EVENTS.BUTTON_PRESS.ALIAS, callback);
case EVENTS.AXIS_MOVEMENT.ALIAS:
return emitter.subscribe(EVENTS.AXIS_MOVEMENT.ALIAS, callback);
}
}
这基本上将回调添加到指定事件监听器的回调列表中。 (问题不在这里)
在我的 Angular 应用程序中,我的服务中有以下代码:
addListener(eventName: string): Observable<GamepadEvent> {
return bindCallback<string, GamepadEvent>(JoypadService.on)(eventName);
}
在我做的一个组件中:
ngOnInit() {
this.gamepadService.addListener(EVENTS.AXIS_MOVEMENT.ALIAS).subscribe(res => {
console.log(res);
});
}
我面临的问题是对 observable 的订阅只触发一次,但是如果我添加以下行并且不使用 bindCallback:
addListener(eventName: string): Observable<GamepadEvent> {
JoypadService.on(eventName, (e) => console.log(e))
return bindCallback<string, GamepadEvent>(JoypadService.on)(eventName).pipe(
takeUntil(this.unsubscribe)
);
}
这个 JoypadService.on(eventName, (e) => console.log(e))` 将在发生更改时触发(应该如此)。
显然 bindCallback 只触发一次,但是是否可以让它无限触发直到取消订阅?
【问题讨论】: