Я пытаюсь реорганизовать свой код с rxjs 5.x на rxjs 6 и Angular 6. У меня был код, который по сути запускает поиск:
startAt = new Subject();
endAt = new Subject();
startobs = this.startAt.asObservable();
endobs = this.endAt.asObservable();
constructor() {}
ngOnInit(){
var that = this;
Observable.combineLatest(this.startobs, this.endobs)
.subscribe((value) => {
this.acctServ.searchAccounts(value[0], value[1])
.subscribe((accounts) => {
console.info("accounts : ", accounts);
});
})
});
}
Для этого я сделал следующее:
startAt = new Subject();
endAt = new Subject();
startobs = this.startAt.asObservable();
endobs = this.endAt.asObservable();
constructor() {
}//End of Constructor
ngOnInit() {
Observable.create().pipe(combineLatest(this.startobs, this.endobs))
.subscribe((value) => {
console.info("Search Box Obersable : ", value);
this.acctServ.searchAccounts(value[0], value[1])
.subscribe((accounts) => {
console.info("accounts : ", accounts);
});
})
});
}//End of ngOnInit
Однако это, похоже, не помогло, и поиск больше не запускается. Мне было интересно, как на самом деле рефакторинг этого кода для работы с rxjs 6?
Спасибо, я думал, что генерирую наблюдаемое через Observable. Это имеет смысл.





Вы используете оператор combineLatest, импортированный из "rxjs/operators", тогда как вы должны использовать метод создания combineLatest, импортированный из "rxjs":
То, что у вас сейчас Observable.create().pipe(combineLatest(this.startobs, this.endobs)), такое же, как следующее:
import { combineLatest } from 'rxjs';
combineLatest(Observable.create(), this.startobs, this.endobs)
...
Это никогда ничего не испускает, потому что combineLatest требует, чтобы все исходные наблюдаемые объекты испускали хотя бы одно значение. Однако Observable.create() сам по себе ничего не излучает, поэтому combineLatest тоже не излучает.
Вместо этого вы должны использовать только следующее:
import { combineLatest } from 'rxjs';
combineLatest(this.startobs, this.endobs)
...
Просто замените
Observable.combineLatestнаcombineLatestв исходном коде и импортируйтеcombineLatestизrxjs. rxjs-dev.firebaseapp.com/api/index/function/combineLatest. Вам также следует узнать об операторе switchMap вместо подписки внутри подписки.