【问题标题】:How to return data after stream was subscribed?订阅流后如何返回数据?
【发布时间】:2019-01-10 06:59:27
【问题描述】:

订阅流后如何返回数据? 比如我在订阅中获取URL,然后我想根据这个URD返回带有数据的流

public get() {
    this.service.getData().subscribe((data: any) => {
        // data was setted here
        this.url = data;
    });

    return this.http.get(this.url)
        .map(r => {
            ...
            return obj;
        });
}

【问题讨论】:

    标签: angular typescript rxjs subscription


    【解决方案1】:

    您应该为此使用concatMap(或mergeMap)并将其变成一个链:

    public get() {
      this.service.getData().do((data: any) => {
          // data was set here
          this.url = data;
        })
       .concatMap(data => this.http.get(data))
       .map(r => {
         ...
         return obj;
        });
    }
    

    或者你甚至不需要使用this.url(我不知道你的用例是什么)。

    public get() {
      this.service.getData()
       .concatMap(url => this.http.get(url))
       .map(r => {
         ...
         return obj;
        });
    }
    

    【讨论】:

      【解决方案2】:
      this.service.getData().subscribe((data: any) => {
        // data was setted here
        return this.http.get(data)
        .map(r => {
      
          return r;
        });
      });
      

           public get() {
              this.service.getData().subscribe((data: any) => {
              // data was setted here
              this.url = data;
              this.get2(this.url);
              });
      }
      public get2(url){
           return this.http.get(url)
            .map(r => {
              ...
              return obj;
            });
      }
      

      【讨论】:

        【解决方案3】:

        尝试:

        public get() {
                this.service.getData().subscribe((data: any) => {
                // data was setted here
                this.url = data;
        
                //get data with the URL
                return this.http.get(data)
                    .map(r => {
                        //Get something with data obtained with the URL
                        return obj;
                      });
                });
              }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-05
          • 2020-01-03
          • 2021-05-21
          • 1970-01-01
          • 2017-01-10
          • 2020-05-06
          相关资源
          最近更新 更多