加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 将Promise转换为RxJs Observable

发布时间:2020-12-17 17:29:13 所属栏目:安全 来源:网络整理
导读:有人可以帮助将此承诺转换为RxJs可观察对象吗? 我想从本地存储中获取令牌,如果出现错误,应该使用订阅了observable的观察者来捕获它.以下是Promise的现有解决方案: getToken(): Promiseany { return new Promiseany((resolve,reject) = { resolve(JSON.pars
有人可以帮助将此承诺转换为RxJs可观察对象吗?
我想从本地存储中获取令牌,如果出现错误,应该使用订阅了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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读