我有以下函数,我试图阻止每次调用此函数时创建Observable。基本上,每次用户在搜索字段中键入内容时,都会调用此函数。我知道我可以从事件中创建Observable,如Observable.fromEvent('button',click),但它需要我对应用程序进行大量的更改。任何帮助表示赞赏。
function search(input) {
Observable.from([input])
.map(value => value)
.filter(value => value.length >3)
.debounceTime(300)
.distinctUntilChanged()
.switchMap(searchValue => {
//ajax call
return Promise.resolve(data)
})
.subscribe(data => {
//Do something with the data
})
}
答案 0 :(得分:1)
如果您想使用可观察对象,但又不想在事件中创建可观察对象,则可以创建Subject
并在next
内调用其search
方法:
import { Subject } from 'rxjs/Subject';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/switchMap';
var searchSubject = new Subject();
.filter(value => value.length > 3)
.debounceTime(300)
.distinctUntilChanged()
.switchMap(searchValue => {
// ajax call
return Promise.resolve(data)
})
.subscribe(data => {
// Do something with the data
});
function search(input) {
searchSubject.next(input);
}