Преобразовать Promise в RxJS Observable


Может ли кто-нибудь помочь преобразовать это обещание в RxJS observable? Я хочу получить токен из локального хранилища, и если ошибка, он должен быть пойман наблюдателем, который подписался на observable. Ниже приводится существующее решение с обещанием:

  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'));

Я попытался преобразовать его в наблюдаемый с помощью следующего метода:

 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 (). похоже, что он успешно разрешен.В то время как обещание ловит его успешно с помощью метода отклонения.Может ли кто-то дать представление о том, что не так? СПАСИБО

1 3

1 ответ:

Вам не нужно делать все это, просто используйте Observable.fromPromise():

Observable.fromPromise(this.authService.getToken())
  ...
  .subscribe(...)
Если вы хотите использовать обещание в любом месте наблюдаемой цепочки, вам даже не нужно преобразовывать его в наблюдаемое, поскольку это происходит автоматически.

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