Rxjs使用Observable.from()字符串并防止多次创建Observable

时间:2017-01-16 23:11:50

标签: javascript rxjs observable

我有以下函数,我试图阻止每次调用此函数时创建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
  })
}

1 个答案:

答案 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);
}