2016-04-11 18 views
2

Ionic 2getlocalStorageにアクセスする機能は約束を返します。以下のコードの問題は、headersオブジェクトがAuthorizationキーが付加される前に返されることです。約束が解決された後にのみheadersオブジェクトが返されるように、以下の関数をどのように変更できますか?角2同期約束

private _createAuthHeaders(): Headers { 
    let headers = new Headers({ 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
    }); 
    this.local.get('authToken').then(res=>{ 
     headers.append('Authorization', res); 
    }, err=>{ 
     headers.append('Authorization', ''); 
    }); 
    return headers; 
} 

答えて

3

私はこのようにコードをリファクタリングします:

private _createAuthHeaders(): Headers { 
    let headers = new Headers({ 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }); 
    this.local.get('authToken').then(res=>{ 
    headers.append('Authorization', res); 
    return headers; 
    }, err=>{ 
    headers.append('Authorization', ''); 
    return headers; 
    }); 
} 

、あなたはこのように、このメソッドを使用することができます:

this._createAuthHeaders().then(headers => { 
    // do something like setting the headers on the request 
    // and execute it... 
}); 

編集

あなたは約束のチェーンを活用することができますあなたのコードをきれいにする。

this._createAuthHeaders().then(headers => { 
    // do something like setting the headers on the request 
    // and execute it... 
    return this.http.get('some url', { headers: headers }).toPromise(); 
}).then(result => { 
    // handle result 
}); 
+0

また、関数の戻り値の型は ' 'でなければなりませんが、' Headers'オブジェクトを返すようにしたかっただけです。呼び出し元関数にカスタムの 'request'オブジェクトを作成するので、その中に別の約束を処理しなければならないと、コードは複雑になります。 –

+0

短い答えは:あなたはできません;-)長い答えは、約束を活用することができるということです。私はこのアプローチのサンプルで私の答えを更新しました –

+0

私はネイティブの ' .localStorage.getItem( 'authToken') '関数は' String'型だけを返します。しかし、私はフレームワークに固執していつかリファクタリングするべきです。ありがとうございました。 –