Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在angular2中调用同一类中的可观测函数_Angularjs_Angular_Rxjs - Fatal编程技术网

Angularjs 在angular2中调用同一类中的可观测函数

Angularjs 在angular2中调用同一类中的可观测函数,angularjs,angular,rxjs,Angularjs,Angular,Rxjs,我在一个类中有两个函数 第一个函数返回Observable 第二个函数是从其他组件调用的 我想在第二次调用第一个函数,使用第一个函数的值并处理它 示例代码: @Injectable() export class SampleService { service:string; getService(): Observable<any> { return this._http.get(`url`, { headers: this.headers

我在一个类中有两个函数

第一个函数返回Observable

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

我想在第二次调用第一个函数,使用第一个函数的值并处理它

示例代码:

@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;
}
@Injectable()
导出类示例服务{
服务:字符串;
getService():可观察{
返回此内容。_http.get(`url`{
headers:this.headers()
}).map(res=>res.json();)
.catch(err=>console.log(err);
}
}
generateToken():字符串{
const service=“”;
this.getService().subscribe(res=>{service=res});
//处理它
回程服务;
}

每当我调用第二个函数时,服务的值返回为空。如何等待订阅结束后再处理。

您不能返回从可观察到的服务中获得的值

您可以在第二种方法中像在第一种方法中一样使用
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
  });
}

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

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

我不清楚什么是
2)
确切的意思。@GünterZöchbauer编辑我需要在第二个函数中观察到值什么是“第二个函数”?第一个函数=>getService()第二个函数=>generateToken()@GünterZöchbauer你不能返回从观察到的值我想使用该值而不是在generateToken()中返回然后您需要添加使用
subscribe(…)
I want use generateToken多个调用中的值的代码。您仍然可以在多个调用中使用此值。。。任何组件都可以订阅它。