В Angular с использованием RX JS имеется следующий код в классе:
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);
}
}
, который в основном добавляет обратный вызов в список обратных вызовов для указанного eventListener. (проблема не здесь)
В моем приложении 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);
});
}
Проблема, с которой я сталкиваюсь, заключается в том, что подписка на наблюдаемое срабатывает только один раз, но если я добавлю следующую строку и не буду использовать bindCallback
:
addListener(eventName: string): Observable<GamepadEvent> {
JoypadService.on(eventName, (e) => console.log(e))
return bindCallback<string, GamepadEvent>(JoypadService.on)(eventName).pipe(
takeUntil(this.unsubscribe)
);
}
this JoypadService.on (eventName, (e) => console.log (e)) `будет запускать все время, когда происходит изменение (как и должно быть).
Очевидно, bindCallback срабатывает только один раз, но можно ли его запускать бесконечно, пока отписаться?