【发布时间】:2020-09-30 05:18:58
【问题描述】:
点击Click Me按钮调用getDataAsObservable脚本中定义的getDataAsObservable方法:
export class HttpService {
jsonFile = '../assets/products.json';
constructor(private http: HttpClient) {}
getDataAsObservable(): Observable<any> {
return this.http.get(this.jsonFile)
}
}
在从http 服务接收到observable 后,app.component.ts 脚本中定义的requestDataAndWait 方法将接收到的response 分配给局部变量data 并将其返回给onClick 方法.但是onClick 方法不是接收数组数据,而是获取ZoneAwarePromise 对象:
async requestDataAndWait() {
let data = [];
await this.http.getDataAsObservable()
.toPromise().then(response => {data=response;} );
return data
}
这里是 Stackblitz 项目的链接: https://stackblitz.com/edit/angular-ivy-bygaut?file=src%2Fapp%2Fapp.component.ts
如何让requestDataAndWait返回data数组而不是ZoneAwarePromise对象?
【问题讨论】:
-
请参阅规范的stackoverflow.com/questions/14220321/…。
async函数 always 返回一个 promise(这是它们的全部 point ),并且您无法通过假设它不存在来绕过异步控制流。好像你已经被告知过两次了:stackoverflow.com/q/62295405/3001761, stackoverflow.com/q/62296092/3001761。
标签: angular typescript promise observable