2017-03-06 7 views
0

私はクラス内に2つの関数があります。angular2の同じクラスで観測可能な関数を呼び出す

最初の関数は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番目の関数を呼び出すたびに、サービスの値がサブスクライブが終わった後、プロセスになるまで待つempty.Howとして返します。

+0

「2)」が正確に何を意味するかはわかりません。 GünterZö[email protected] –

+0

は、私が – Sreemat

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

@GünterZöchbauerことをやって。 – Sreemat

+0

私は(generateTokenに戻るにはない値を使用したい) – Sreemat

+0

次に、あなたは '' –

0

それが応答を受信するまで購読が戻って来ることはありませんので、これは非同期で返します。

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

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

    return service; //Instant return of blank value 
} 

を私が観測自体を返すと、あなたがそれを必要とすることに加入することをお勧め:

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

その後

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

私はgenerateTokenに複数のコールを使用したい(...)購読内の値を使用するコードを追加する必要があります。 – Sreemat

+0

複数の呼び出しでこれを使用することはできますが、どのコンポーネントもこれをサブスクライブすることができます。 – chrispy

関連する問題