viewer.complete()不会立即返回

时间:2019-04-14 15:32:10

标签: angular

也许我错过了重点,但我印象中是observer.complete()会完成观察者的操作,即观察者.complete()自完成以来就没有执行之后的语句。

 export class RecordsService {
   public getRecords(): Observable<any> {

let vm = this;

return new Observable(observer => {
    var records = vm.http.get(
    url).subscribe(data =>{
      console.log('we got data ', data);
      observer.next(data)
      observer.complete();
    });

    observer.next(null);
    observer.complete();
     });
   }
 }

我可以正确看到控制台,但是订户正在获取数据,并且为null。我怎样才能做到这一点?我希望通过observer.next(data)获取数据,而observer.next(null)不会被执行,因为我之前曾调用过observer.complete()。

现在我先获取数据,然后获取null,这是我所没想到的

1 个答案:

答案 0 :(得分:2)

观察者完成后不会再发出其他值。

https://stackblitz.com/edit/typescript-4cc25g

import { Observable } from 'rxjs';

const hello = Observable.create(function(observer) {
  observer.next('Hello');
  observer.complete();
  observer.next('World');
});

const subscribe = hello.subscribe(val => console.log(val));

您可以在stackblitx示例中看到这一点。

  

由于我之前曾调用过observer.complete(),所以我希望不会通过observer.next(data)获取数据,而observer.next(null)也不会执行。

observer.next(null)首先被称为 ,随后异步HTTP调用observer.next(data),但是观察者已经完成。