订阅流后如何return数据?

How to return data after stream was subscribed?

订阅流后如何return数据? 例如,我在订阅中得到 URL,然后我想 return 带有基于此 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;
        });
}
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;
      });
}

尝试:

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

您应该为此使用 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;
    });
}