【问题标题】:Calling observable function in same class in angular2在angular2中调用同一类中的可观察函数
【发布时间】:2017-03-07 01:32:36
【问题描述】:

我在一个类中有两个函数

第一个函数返回 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;
}

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

【问题讨论】:

  • 我不清楚2) 的确切含义。
  • @GünterZöchbauer 编辑我需要在第二个函数中观察到值
  • 什么是“第二功能”?
  • 第一个函数=>getService() 第二个函数=>generateToken() @GünterZöchbauer
  • 你不能返回一个从可观察对象获得的值

标签: angularjs angular rxjs


【解决方案1】:

您不能返回从 observable 获得的值。

您可以像在第一种方法中一样在第二种方法中使用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()中使用不返回的值
  • 那你需要添加使用subscribe(...)里面的值的代码
【解决方案2】:

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

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

【讨论】:

  • 我想多次调用 generateToken。
  • 你仍然可以在多个调用中使用它...任何组件都可以订阅它。
猜你喜欢
  • 2017-10-10
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2017-04-12
  • 2023-03-28
  • 1970-01-01
  • 2023-03-25
  • 2016-10-06
相关资源
最近更新 更多