为什么观察者方法被调用两次?

doo*_*glu 2 observable rxjs angular

我有以下返回观察者的方法,但它被调用了两次:

public getClassesAndSubjects(school: number, whenDate: string): Observable<ClassesAndSubjects[]> {

    console.log('1');

    const observable = this.classService.GetClassesAndSubjects(school, whenDate);

    console.log("2");

    observable.subscribe(data => {
      if (!data.hasOwnProperty('errors')) {
        this.classesSubjects = data;

      }
    }, error => {
      console.log("ERROR loading GetClassesAndSubjects: " + error);
    });

    console.log("3");

    return observable;
  }
Run Code Online (Sandbox Code Playgroud)

我的意思是一条线路const observable = this.classService.GetClassesAndSubjects(school, whenDate);被调用两次并向服务器发送两次请求。

像这样调用:

this.classInstance.getClassesAndSubjects(school, date).subscribe(value => {
   // TODO 
});
Run Code Online (Sandbox Code Playgroud)

bry*_*n60 5

发生这种情况是因为您订阅了 observable 两次,并且 observable 每次订阅时都会执行。

改变这个:

observable.subscribe(data => {
  if (!data.hasOwnProperty('errors')) {
    this.classesSubjects = data;

  }
}, error => {
  console.log("ERROR loading GetClassesAndSubjects: " + error);
});
Run Code Online (Sandbox Code Playgroud)

对此:

observable.do(data => {
  if (!data.hasOwnProperty('errors')) {
    this.classesSubjects = data;

  }
});
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您只需在您的流中添加一个运算符,该运算符在您在返回时订阅它之前不会执行。