Angular 7 Observer не определен - PullRequest
       8

Angular 7 Observer не определен

0 голосов
/ 29 октября 2018

У меня есть служба, скажем, MyService, цель которой просто играть с наблюдаемыми rxjs:

import { Injectable } from '@angular/core'
import { Observable } from 'rxjs';

@Injectable()
export class MyService {

    private mydatas: any[] = [{
        id: 1,
        name: "My first"
      }, 
      {
        id: 2,
        name: "My second"
      },
      {
        id: 3,
        name: "My third"
      }];

        public getMys(): any {

            const myObservable = new Observable((observer) => {
                setTimeout(() => {
                    observer.next(this.mydatas);
                }, 1000);

                setTimeout(() => {
                    observer.error("I AM AN ERRROR!!!")
                }, 2000);

                setTimeout(() => {
                    observer.complete();
                }, 3000);

                return myObservable;
            });
        }
}

Используется компонентом:

import { Component, OnInit } from '@angular/core';
import { MyService } from '../shared/my.service';

@Component({
  selector: 'my-list',
  templateUrl: './my.component.html',
  styleUrls: ['./my.component.scss']
})

export class MyListComponent implements OnInit {

  mys: any[] = [];

  constructor(private myService: MyService) { }

  ngOnInit() {

    const myObservable = this.myService.getMys();

    myObservable.subscribe(
      (mys) => {
        this.mys = mys;
            },
      (err) => {
            },
      () => {
            }
    );
  }
}

Я запускаю его внутри HTML с угловыми аннотациями (* ngFor), и при запуске у меня появляется следующая ошибка в консоли Chrome:

ОШИБКА TypeError: Невозможно прочитать свойство 'subscribe' из undefined в MyListComponent.push ../ SRC / приложение / мой / моя-лист / мой-list.component.ts.MyListComponent.ngOnInit

Что я делаю не так?

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы возвращаете наблюдателя, возвращайте myObservable после назначения наблюдаемой.

           const myObservable = new Observable((observer) => {
            setTimeout(() => {
                observer.next(this.mydatas);
            }, 1000);

            setTimeout(() => {
                observer.error("I AM AN ERRROR!!!")
            }, 2000);

            setTimeout(() => {
                observer.complete();
            }, 3000);

        });

            return myObservable;
0 голосов
/ 29 октября 2018

Вы должны фактически вернуть Observer, в противном случае метод просто возвращает undefined:

public getMys(): Observable<any[]> {
  return new Observable((
// ...

Если бы вы правильно указали тип подсказки для вашего метода, ошибка была бы более ясной.

...