【问题标题】:Angular2 - Cancel flow: Observable -> debounceTime -> mergeMap -> subscribeAngular2 - 取消流程:Observable -> debounceTime -> mergeMap -> subscribe
【发布时间】:2017-03-02 10:53:23
【问题描述】:

如何取消

Observable -> debounceTime -> mergeMap -> 订阅

mergeMap 方法中的流?

我想实现这样的目标:

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

但我得到错误:

例外:您在预期流的位置提供了“未定义”。你 可以提供 Observable、Promise、Array 或 Iterable。

我知道mergeMap 必须返回Observable, Array ...,但是如果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; 或什么都没有。

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

【问题讨论】:

    标签: angular


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      只是return; 而不是返回null:

      // return null;
      return;
      

      您可以像当前一样返回具有某些属性的 Observable,并检查该属性是否为空:

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

      【讨论】:

      • 什么都没有,因为调用了异常。有关源代码,请参阅我编辑的帖子。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-28
        • 2016-11-28
        • 2016-04-12
        • 1970-01-01
        • 2017-04-13
        • 1970-01-01
        • 2017-05-29
        • 1970-01-01
        相关资源
        最近更新 更多