2017-05-02 13 views
1

私はHTTP要求インターセプタを作成しています。Httpモジュールgetメソッドをオーバーライドしていますので、自動的にJWTトークンをヘッダに追加できます。正確なObservable <Response>を返します。Promise自体は返しません。

私は、次のコードでそれを試してみたが、メソッドから戻るとき、私は次のエラーを取得する:

タイプPromise<Observable<Response>>Observable<Response>を型に代入できません。

then()以内に返そうとしても、同じエラーが発生します。

正しいObservable<Response>を取得して返品する方法を教えてください。

// ... 

@Injectable() 
export class AdalHttp extends Http { 
    constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) { 
    super(backend, defaultOptions); 
    } 

    get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    return this.getWithAdal(url, options); // <-- ERROR HERE 
    } 

    private getWithAdal(url: string, options?: RequestOptionsArgs): Promise<Observable<Response>> { 
    return new Promise((resolve, reject) => { 
     this.authenticate((authResponse) => { 
     if (!options) { 
      options = { headers: new Headers() }; 
     } 

     options.headers.set('Authorization', 'Bearer ' + authResponse.accessToken); 

     resolve(super.get(url, options)); 
     }, err => reject(err)); 
    }); 
    } 

    // ... 
} 
+0

this.authenticateは何ですか観察可能戻りますか? – kyle

+0

'async' /' await'を使用できますか? –

答えて

3

getメソッドが返されます。Observable。 getWithAdalメソッドを呼び出し、getWithAdalから返されたオブジェクトをすぐに返します。したがって、getWithAdalはObservableも返す必要があります。

使用Observable.fromPromiseが観測への約束を変換するには、getWithAdal方法の変更の署名が

get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
     return this.getWithAdal(url, options); // <-- ERROR HERE 
    } 

    private getWithAdal(url: string, options?: RequestOptionsArgs): Observable<Response> { 
     return Observable.fromPromise(new Promise((resolve, reject) => { 
     // just make it simpler for the example.... keep your code here as is 
     let options = {headers: new Headers()}; 
     options.headers.set('Authorization', 'Bearer '); 
     resolve(super.get(url, options)); 
     })); 
    } 
関連する問題