2017-03-02 63 views
0

我怎樣才能取消mergeMap方法Angular2 - 取消流:可觀察 - > debounceTime - > mergeMap - >訂閱

Observable -> debounceTime -> mergeMap -> subscribe

流?

我想達到這樣的事情:

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 == ""。怎麼樣?

編輯:

我的第一個代碼是(不返回NULL):

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); 

這是一樣的通話return;但例外的是一樣的,如果我叫return nullreturn;或全無。

編輯的宰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;而不是返回NULL:

// return null; 
return; 

您可以返回可觀察到的一些屬性格式你目前正在做的和檢查如果該財產不是空白的:

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); 
相關問題