如何在角中使用异步/等待来发出异步请求。例如,调用一个函数postDataToServer(myData),并且只在它解析调用getDataFromServer()之后?我读过一些例子,但仍然没有把它写下来,如果我能看到一个基本的例子,您只在第一个请求完成后才发出一个http请求,那么这将非常有帮助。
编辑:我的http请求返回可观察的不承诺,也许异步/等待不是正确的选择吗?
发布于 2017-12-22 18:30:47
好吧,如果您要起诉Http或HttpClient,那么post和get方法将返回可以subscribe的observable,并且回调总是异步执行的。
this.http.post(url, body).subscribe(
(res) => {
// you can just simply call another function which will make request
this.getData();
// or just make another request
this.http.get(url).subscribe(...);
}
private getData() {
this.http.get(url).subscribe(...)
}发布于 2017-12-22 18:43:35
这实际上取决于应用程序的结构,但您可以使用async/await来完成以下操作:
async postAndGetData() {
await this.http.post(postUrl, postData).toPromise();
return this.http.get(getUrl).toPromise();
}我会说,您的post请求返回所需的数据是有意义的,这样您就不必创建后续的get请求。
实现此目的的另一种方法是拥有一个以可观察到的方式保存数据并使用异步管道的服务:
<!-- template -->
{{ postService.data | async }}
@Injectable()
export class PostService {
data = new Subject;
constructor(private http: HttpClient) { }
loadData() {
this.http.get(getUrl).map(response => data.next(response));
}
postDataToServer(myData) {
this.http.post(postUrl, myData).switchMap(() => this.loadData());
}
}https://stackoverflow.com/questions/47945835
复制相似问题