gpt4 book ai didi

angular - 将异步函数转换为 RxJs Observable

转载 作者:行者123 更新时间:2023-12-05 08:25:08 27 4
gpt4 key购买 nike

防止写一定量的代码,比如这个例子:

    ...
public getDataSet() : Observable<any>
{
return new Observable(observer => {
if (this.dataset === undefined) {
this.get().subscribe(data => {
this.dataset = new DataSet(data) ;
observer.next(this.dataset)
observer.complete() ;
}) ;
}
else {
observer.next(this.dataset)
observer.complete() ;
}
}) ;
}

我想使用 async/await 特性,但仍然返回一个 Observable 以在使用异步数据收集服务时保持一致。

因此根据 RxJs 的文档,我应该使用 from() 运算符。 https://www.learnrxjs.io/learn-rxjs/operators/creation/from

这是我尝试实现的(看起来更简洁):

import { Observable, from } from 'rxjs' ;
...
return from(async () => { // ✘ error
if (this.dataset === undefined) this.dataset = new DataSet(await this.get().toPromise()) ;
return this.dataset ;
}) ;

但是,TypeScript 无法将 async () => {} 识别为 ObservableInput,但它确实识别了这个:

import { Observable, from } from 'rxjs' ;
...
return from(new Promise((resolve) => { // ✔ valid
if (this.dataset === undefined) {
this.get().toPromise().then(data => {
this.dataset = new DataSet(data) ;
resolve(this.dataset) ;
}) ;
}
else resolve(this.dataset) ;
})) ;

不过,JavaScript 的 async 关键字使函数始终返回 Promise。

console.log((async () => {}) ())
// Promise {}

有没有办法让 from() RxJs 运算符接受异步 promise ?

最佳答案

异步函数在被调用时返回一个 promise,在此之前它只是一个函数。

function fromAsyncFunction(): Observable<number> {
return from((async () => {
return 1;
})()); // Call it
}

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

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