Короче говоря: у меня есть приложение Angular, инициализирующееся путем вызова службы, которая вызывает вторую службу данных. После того, как промежуточная служба получит и обработает свои данные из службы данных, она должна сообщить приложению через Observable или Subject, что приложение может продолжить загрузку. Я хочу сократить любые последующие вызовы одного и того же метода.
export class MiddleService {
private triedOnce = false;
private isLoadedSubject = new AsyncSubject();
public loadConfig (): AsyncSubject<any> {
if (!this.triedOnce) {
this.isLoadedSubject.next(false);
this.dataService.getConfiguration(...).subscribe(
(data) => {
// do stuff with data
this.isLoadedSubject.next(true);
}
);
this.isLoadedSubject.complete();
this.triedOnce = true;
}
return this.isLoadedSubject;
}
}
Первый вопрос, я думаю, заключается в том, является ли использование Subject таким образом анти-шаблоном или нестандартным использованием. (Это применимо?)
Во-вторых, я чувствую, что должен повторно использовать и иметь возможность повторно использовать isLoadedSubject
вместо того, чтобы нуждаться в отдельном логическом значении. Я не уверен, как это сделать вне подписки и ее обратного вызова complete
. AsyncSubject
имеет свойство isCompleted
, но оно закрытое.