Для достижения вашей цели, вы можете использовать оператор pipe
вместе с оператором filter
функционального программирования, чтобы отфильтровать только экземпляры, которые являются AnonymousSubject
или Subscriber
. Затем можно использовать метод getObservers()
объекта AnonymousSubject
или Subscriber
, чтобы получить массив наблюдателей.
Каждый наблюдатель имеет свойство closed
, которое является булевым значением, указывающим, завершил ли наблюдатель свою работу или нет. Вы можете использовать метод find
, чтобы получить первый наблюдатель с closed
равным false
.
После получения наблюдателя, вы можете использовать метод subscriptionId
для получения его айди.
Ниже приведен пример кода, который демонстрирует, как достать айди из AnonymousSubject
или Subscriber
в Angular:
import { Observable, AnonymousSubject, Subscriber } from 'rxjs'; function getObserverId(observer: AnonymousSubject<any> | Subscriber<any>): number | null { if (observer instanceof AnonymousSubject || observer instanceof Subscriber) { const observers = observer.getObservers(); const currentObserver = observers.find(observer => !observer.closed); if (currentObserver) { return currentObserver.subscriptionId; } } return null; } // Пример использования const subject = new AnonymousSubject(); const subscription = subject.subscribe(() => { console.log('Запуск обработчика...'); }); const observerId = getObserverId(subject); console.log('Айди наблюдателя:', observerId); subscription.unsubscribe();
В этом примере мы сначала создаем экземпляр AnonymousSubject
. Затем мы подписываемся на него и выводим в консоль айди наблюдателя. После этого мы вызываем метод unsubscribe
, чтобы завершить подписку.