Почему оператор отвода в моей службе не работает

#angular

#angular

Вопрос:

Может кто-нибудь, пожалуйста, помочь мне и сказать мне, почему мой наблюдаемый пустой?

класс

 ionViewWillEnter(): void {
    this.notificationsSvc.fetchNotifications();
  }

  ngOnInit(): void {
    this.notificationSubscription = this.notificationsSvc.notifications.subscribe(
      (data) => {
        console.log(data) //this is empty
      }
    );
  }
  

Обслуживание

 import { Injectable } from "@angular/core";
import { BehaviorSubject } from "rxjs";
import { HttpClient } from "@angular/common/http";
import { tap } from "rxjs/operators";

@Injectable()
export class NotificationsService {
  private _notifications = new BehaviorSubject({});

  constructor(private httpClient: HttpClient) {}

  get notifications() {
    return this._notifications.asObservable();
  }

  fetchNotifications() {
    return this.httpClient
      .get("https://website.com/notifications.json")
      .pipe(tap((data) => this._notifications.next(data)));
  }
}
  

Средство получения уведомлений всегда возвращает пустой. Я не уверен, что еще делать…

Комментарии:

1. Где вы используете наблюдаемую, созданную fetchNotifications()?

2. @BerkKurkcuoglu добавил дополнительную информацию

3. вам нужно subscribe войти this.notificationsSvc.fetchNotifications().subscribe(); , чтобы позволить tap работать

4. Кажется, ничто не подписывается на fetchNotifications ..?

Ответ №1:

Наблюдаемое не дает результатов, если вы не подписываетесь на него, поэтому вам нужно подписаться на наблюдаемое из fetchNotifications(), вот так:

 ionViewWillEnter(): void {
    this.notificationsSvc.fetchNotifications().subscribe();
}
  

P.S. Чтобы избежать подобных проблем, я бы настоятельно рекомендовал указать параметры и возвращаемые типы ваших функций и полностью использовать Typescript.