2017-03-02 6 views
0

を購読しますか?Angular2 - 流れをキャンセル:観察可能 - > debounceTime - > mergeMap - >私はmergeMap方法で</p> <blockquote> <p>Observable -> debounceTime -> mergeMap -> subscribe</p> </blockquote> <p>流れをキャンセルするにはどうすればよい

私はそのような何かを達成したい:

var request = this.listPartners.filterChange.asObservable() 
     .debounceTime(300) 
     .mergeMap(value => 
     { 
      if (value != "") 
       return this.partnersService.list({ filter: value }) //call http get 
      return null; 
     }); 
    if (request) 
     request.subscribe(partners => this.partners = partners); 

をしかし、私はエラーを取得する:

EXCEPTION: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

私はmergeMapが...、アレイを観察可能返さなければなりませんが、私はしたくないということを理解しますvalue == ""の場合はサーバーに要求してください。どうやって?

編集:

私の最初のコード(リターンヌルなし)であった:

コール return;と同じですが、私は return nullreturn;または何を呼び出すと例外は、同じである
var request = this.listPartners.filterChange.asObservable() 
     .debounceTime(300) 
     .mergeMap(value => 
     { 
      if (value != "") 
       return this.partnersService.list({ filter: value }) 
     }); 
    if (request) 
     request.subscribe(partners => this.partners = partners); 

。ジャイのasnwerため

編集:

var request = this.listPartners.filterChange.asObservable() 
     .debounceTime(300) 
     .mergeMap(value => 
     { 
      if (value != "") 
       return this.partnersService.list({ filter: value }) 
      return; 
     }); 
    console.log("request", request);  //this is not called if (value == "") 
    if (request) 
     request.subscribe(partners => this.partners = partners); 

答えて

1

あなたはそれが動作していないこと

var request = this.listPartners.filterChange.asObservable() 
     .debounceTime(300) 
     .filter((value)=> value!='') /// will stop the rest if the value is '' 
     .mergeMap(value => 
     { 
      if (value != "") 
       return this.partnersService.list({ filter: value }) //call http get 
      return null; 
     }); 
    if (request) 
     request.subscribe(partners => this.partners = partners); 
1

だけreturn;代わりにヌルを返す:

// return null; 
return; 

現在、あなたがやってチェックしているとあなたは、いくつかのproperyで観察を返すことができますそのプロパティが空白でない場合:

var request = this.listPartners.filterChange.asObservable() 
    .debounceTime(300) 
    .mergeMap(value => this.partnersService.list({filter: value })); 

if (request.filter !== "") 
    request.subscribe(partners => this.partners = partners); 
+0

絞り込むことができます。私は同じエラーが発生します:あなたは '未定義'を提供しました... – Makla

+0

あなたは '要求'を記録して何が記録されているか見ることができますか? – Jai

+0

例外が呼び出されたため、何も表示されません。ソースコードは私の編集ポストを参照してください。 – Makla

0

mergeMap関数ではnullを返すことはできません。

返されます。

var request = this.listPartners.filterChange.asObservable() 
    .debounceTime(300) 
    .mergeMap(value => 
    { 
     if (value != "") 
      return this.partnersService.list({ filter: value }) //call http get 
     return; 
    }); 
if (request) 
    request.subscribe(partners => this.partners = partners); 
関連する問題

 関連する問題