0

我有一个服务,比如 MyService,它的目的只是玩 rxjs observables:

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) => {
            },
      () => {
            }
    );
  }
}

我在带有角度注释 (*ngFor) 的 html 中运行它,当我运行它时,在 Chrome 的控制台中出现以下错误:

错误类型错误:无法读取 MyListComponent.push../src/app/my/my-list/my-list.component.ts.MyListComponent.ngOnInit 处未定义的属性“订阅”

我究竟做错了什么?

谢谢

4

2 回答 2

1

您要返回观察者,在分配可观察对象后返回 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;
于 2018-10-29T13:20:19.957 回答
0

您必须实际返回 Observer 否则该方法只会返回undefined

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

如果您正确地键入提示您的方法,错误会更清楚。

于 2018-10-29T13:18:53.053 回答