我正在尝试将我的代码从rxjs 5.x重构到rxjs 6和Angular6。我有一个实质上触发搜索的代码:
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.log("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.log("Search Box Obersable : ", value);
this.acctServ.searchAccounts(value[0], value[1])
.subscribe((accounts) => {
console.log("accounts : ", accounts);
});
})
});
}//End of ngOnInit
但是,这似乎没有帮助,搜索也不再触发。我想知道如何真正重构此代码以与rxjs 6一起使用?
答案 0 :(得分:4)
您正在使用从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都发出至少一个值。但是Observable.create()
本身不会发出任何东西,因此combineLatest
也不会发出任何东西。
相反,您应该只使用以下内容:
import { combineLatest } from 'rxjs';
combineLatest(this.startobs, this.endobs)
...