为 rxjs 重构 combinelatest
refactoring combinelatest for rxjs
我正在尝试将我的代码从 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.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?
您正在使用从 "rxjs/operators"
导入的 combineLatest
运算符,而您应该使用从 "rxjs"
:
导入的 combineLatest
创建方法
你现在的Observable.create().pipe(combineLatest(this.startobs, this.endobs))
和下面的一样:
import { combineLatest } from 'rxjs';
combineLatest(Observable.create(), this.startobs, this.endobs)
...
这将永远不会发射任何东西,因为 combineLatest
要求所有源 Observables 至少发射一个值。但是 Observable.create()
本身不会发出任何东西,所以 combineLatest
也不会发出任何东西。
相反,您应该只使用以下内容:
import { combineLatest } from 'rxjs';
combineLatest(this.startobs, this.endobs)
...
我正在尝试将我的代码从 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.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?
您正在使用从 "rxjs/operators"
导入的 combineLatest
运算符,而您应该使用从 "rxjs"
:
combineLatest
创建方法
你现在的Observable.create().pipe(combineLatest(this.startobs, this.endobs))
和下面的一样:
import { combineLatest } from 'rxjs';
combineLatest(Observable.create(), this.startobs, this.endobs)
...
这将永远不会发射任何东西,因为 combineLatest
要求所有源 Observables 至少发射一个值。但是 Observable.create()
本身不会发出任何东西,所以 combineLatest
也不会发出任何东西。
相反,您应该只使用以下内容:
import { combineLatest } from 'rxjs';
combineLatest(this.startobs, this.endobs)
...