gpt4 book ai didi

angular - 将 Promise 转换为 RxJs Observable

转载 作者:太空狗 更新时间:2023-10-29 17:18:54 26 4
gpt4 key购买 nike

有人可以帮助将此 promise 转换为 RxJs observable 吗?我想从本地存储中获取 token ,如果出错,它应该被订阅可观察的观察者捕获。以下是 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 获取 token 时发生错误时,RxJs observable 不会通过 obs.next() 捕获它。这就像它已成功解决。而 Promise 通过 reject 方法成功捕获它。有人可以给出一个想法什么是错的?谢谢

最佳答案

你不需要做所有这些,只需使用 from() :

import { from } from 'rxjs';

from(this.authService.getToken())
...
.subscribe(...)

如果您想在 Observable 链中的任何地方使用 Promise,您甚至不需要将其转换为 Observable,因为它会自动发生。

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

2019 年 4 月:针对 RxJS 6 进行了更新

关于angular - 将 Promise 转换为 RxJs Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46151876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com