在angular2

时间:2017-03-06 17:16:03

标签: angularjs angular rxjs

我在类

中有两个函数

第一个函数返回Observable。

从其他组件调用第二个函数

我希望第二次调用第一个函数使用first的值并处理它。

示例代码:

@Injectable()
export class SampleService {

service:string;

getService(): Observable<any> {
        return this._http.get(`url`, {
            headers: this.headers()
        }).map(res=>res.json();)
            .catch(err=>console.log(err);
    }
 }


generateToken():string{
const service="";
this.getService().subscribe(res=>{service=res});
//process it
return service;
}

每当我调用第二个函数时,service的值都返回为空。如何等待订阅结束然后进行处理。

2 个答案:

答案 0 :(得分:0)

您无法返回从可观察量中获得的值。

你可以像第一种方法一样在第二种方法中使用map,然后在你调用的地方订阅generateToken

generateToken():string{
  return this.getService().map(res=>{return service=res});
}

someMethod() {
  this.generateToken.subscribe(res => this.service = res);
}

或将其分配给第二个属性中的字段

generateToken():string{
  return this.getService().subscribe(res=>{this.service =res});
}

<强>更新

someMethod() {
  this.generateToken.subscribe(res => {
    this.service = res;
    // other code here
  });
}

答案 1 :(得分:0)

这将异步返回,因为订阅在收到响应之前不会返回:

generateToken():string{
    const service="";

    this.getService().subscribe(res=>{service=res}); //Async

    return service; //Instant return of blank value
}

我建议返回observable本身并在需要的地方订阅它:

generateToken(){
    return this.getService().map(res => res.json()); //presuming json payload
}

然后在构造函数中请求sampleService之后在组件内部:

this.sampleService.generateToken().subscribe(data = > { //use data });