也许我错过了重点,但我印象中是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,这是我所没想到的
答案 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)
,但是观察者已经完成。