【发布时间】:2021-10-03 09:33:23
【问题描述】:
防止写一定量的代码,比如这个例子:
...
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 操作员接受异步承诺?
【问题讨论】:
标签: angular typescript async-await rxjs observable