我有一些代码如下:
async someFunction(){
...
await apiRequest()
...
}
apiRequest(){
return new Promise(resolve=>{
this.httpClient.getAuth('/api')}.subscribe({
next: res => {
...
resolve(true)
},
error: error => { resolve(false) }
})
)
}
这段代码有点难看。有没有其他方法可以不使用promise来同步函数的调用?也许使用rxjs?我只需要知道API调用完成了。
4条答案
按热度按时间6ss1mwsb1#
有很多方法,我认为最简单的一个是从
RxJS
中使用toPromise
,但是这个函数从版本7开始就 deprecated 了,新的函数是lastValueFrom
,工作原理如下:您现在可以做的是等待“someFunction()”,如下所示:
kyks70gy2#
async
/await
使用承诺(一个未来值).pipe()
/.switchMap()
来管理多个未来值我猜你正在寻找的是这两种方法,它们给你一个来自可观察的承诺。
5jdjgkvh3#
承诺不是Angular 的方式,Angular 是建立在RxJs之上的,所以最好坚持RxJs。apiRequest应该返回可观察的,而不是将其转换为承诺。
然后你订阅你使用它的地方。
或者我们使用异步管道来管理组件中的订阅
在模板中
这是最常见的Angular 模式。不推荐使用promise和async/waits。学习RxJs,它会让你成为一个更好的Angular 开发者。将一个可观察到的转换为promise会剥夺它的RxJs超级能力。RxJs操作符允许你从可观察到的构建流,比如组合和Map流。这是一种方法,一旦点击了promise,你就不会回头看它,即使它一开始有点让人不知所措。
eqoofvh94#
rxJS对此-https://www.learnrxjs.io/learn-rxjs/operators/creation/from有一个
from
运算符