2017-09-18 12 views
3

私はイオンストレージに認証トークンを持っており、httpリクエストを通過させる必要がありますが、storage.get.then約束から値を得ることはできません。約束の外で変数を使用する方法

getProducts(){ 
    let headers = new Headers(); 
    this.token= this.storage.get('Authorization').then((value)=>{ 
     this.token= value; 
     return this.token; 
    }); 
    headers.append("Authorization",this.token); 

    return this.http.get('https://vjtest.cobold.xyz/vapi/public/api/products',{headers: headers}) 
     .map(res=> res.json()); 

    } 
+0

@wolverine私は内部http.getがhttp.getリターンが悪い申し訳ありませんgetProduct //ありがとう –

答えて

3

約束事は非同期なので、応答を待ってから2番目の要求を呼び出す必要があります。

getProducts(){ 
    return this.storage.get('Authorization').then((value)=>{ 
     this.token= value; 
     return this.sendReq(this.token) 
    }); 
} 

sendReq(token){ 
     let headers = new Headers();  
     headers.append("Authorization",token); 
     return this.http.get('https://vjtest.cobold.xyz/vapi/public/api/products',{headers: headers}) 
     .map(res=> res.json()); 
} 
+0

言葉にすることから、製品の値を返しませんので、サブスクライブ部分でエラーになります配置する場合、なぜこのエラーが発生しているのですか?プロパティ 'subscribe'がタイプ 'Promise >'に存在しません。 –

+1

リクエストにアクセスするには、HTTPを購読する必要があります。 –

0

あなたは(観測可能になります)httpリクエストを返し、あなたの関数に加入し、 か、要求自体に加入した後、それを操作のいずれか:

this.http 
.get('https://vjtest.cobold.xyz/vapi/public/api/products',{headers: headers}) 
.subscribe(data => { 
    //manipulate what the request returned here 
}); 
+0

私はデータを操作していない、私は単にそれを返しています。私は、イオンストレージからトークンを取り出し、それをヘッダーに入れて認証しようとしています。 –

+0

それで、マップする必要はありません。それをマップして操作する誰かにそれを任せた。 –

0

async機能を使用してみてください。

getToken() { 
    return this.storage.get('Authorization'); 
} 

async getProducts(){ 
    this.token = await getToken(); 
    let headers = new Headers(); 
    headers.append("Authorization",this.token); 
    return his.http.get('https://vjtest.cobold.xyz/vapi/public/api/products',headers: headers}).map(res=> res.json()); 

} 
+0

この構文は角度2では機能しません。 –

+0

@MayankSingh functionキーワードを削除してみてください。更新された答えを参照してください – wolverine

関連する問題