2017-09-11 12 views
3

誰かがこの約束をRxJs observableに変換するのに役立つことができますか? ローカルストレージからトークンを取得したいと思います。エラーの場合は、observableを購読しているオブザーバーにキャッチする必要があります。以下プロミスと既存のソリューションである:私は方法以下で観察に変換しようとPromise to RxJs Observableに変換してください

this.authService.getToken().then(token => { 
     this.token = token; 
    }).catch(() => console.log('Error! cannot get token')); 

getToken(): Promise<any> { 
    return new Promise<any>((resolve, reject) => { 
     resolve(JSON.parse(localStorage.getItem('currentUser')).token); 
     reject(); 
    }); 
    } 

と加入者である

getToken2(): Rx.Observable<number> { 
    return Rx.Observable.create(obs => { 
     obs.next(JSON.parse(localStorage.getItem('currentUser')).token); 
     obs.error('Error! cannot get token'); 
    }); 
    } 

this.authService.getToken2() 
    .subscribe((token) => console.log(token), (er) => console.log(er)); 

しかし、localstorageからトークンを取得中にエラーが発生した場合、RxJs observableはobs.next()を介してそれをキャッチしません。それは正常に解決されたようです。Promiseはrejectメソッドで正常にキャッチします。アイデア何が間違っている?おかげ

答えて

4

あなたはこのすべてを行う必要はありません、ただ使用Observable.fromPromise()

Observable.fromPromise(this.authService.getToken()) 
    ... 
    .subscribe(...) 

あなたが観察チェーンのどこにでも約束を使用する場合は、たとしても観察可能に変換する必要はありません。それは自動的に起こります。

https://medium.com/@benlesh/rxjs-observable-interop-with-promises-and-async-await-bebb05306875

+0

answer.Iのためにあなたにマーティンをありがとうしかし、私は入手トークン方式自体が観測に変換します。私はPromiseやfromPromiseを使いたくない。あなたはそれを書くことができますか? –

+0

私はあなたがしたいことを理解していません。あなたは約束を何も使用したくないのですか?あなたは何をしたいのかを示すデモをすることができますか? – martin

+0

正確に。私はPromiseをまったく使いたくない。まず、fromPromiseで変換するのではなく、Observableを使用してgetTokenを作成します。次に、このメソッドに登録します。 –