有人可以帮助将此承诺转换为RxJs可观察对象吗?
我想从本地存储中获取令牌,如果出现错误,应该使用订阅了observable的观察者来捕获它.以下是Promise的现有解决方案:
我想从本地存储中获取令牌,如果出现错误,应该使用订阅了observable的观察者来捕获它.以下是Promise的现有解决方案:
getToken(): Promise<any> { return new Promise<any>((resolve,reject) => { resolve(JSON.parse(localStorage.getItem('currentUser')).token); reject(); }); }
和订户是:
this.authService.getToken().then(token => { this.token = token; }).catch(() => console.log('Error! cannot get token'));
我尝试使用以下方法将其转换为Observable:
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通过拒绝方法成功捕获它.可以有人给出一个想法怎么了?谢谢
解决方法
你不需要做所有这些,只需使用
Observable.fromPromise()
:
Observable.fromPromise(this.authService.getToken()) ... .subscribe(...)
如果你想在Observable链中的任何地方使用Promise,你甚至不需要将它自动转换为Observable.
https://medium.com/@benlesh/rxjs-observable-interop-with-promises-and-async-await-bebb05306875