Angular2 - 取消流:可观察 - > debounceTime - > mergeMap - >订阅

Angular2 - 取消流:可观察 - > debounceTime - > mergeMap - >订阅

问题描述:

我怎样才能取消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); 

你可以过滤它

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

只是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

你不能在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);