首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角异步编程

角异步编程
EN

Stack Overflow用户
提问于 2017-12-22 18:27:51
回答 2查看 1.7K关注 0票数 0

如何在角中使用异步/等待来发出异步请求。例如,调用一个函数postDataToServer(myData),并且只在它解析调用getDataFromServer()之后?我读过一些例子,但仍然没有把它写下来,如果我能看到一个基本的例子,您只在第一个请求完成后才发出一个http请求,那么这将非常有帮助。

编辑:我的http请求返回可观察的不承诺,也许异步/等待不是正确的选择吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-22 18:30:47

好吧,如果您要起诉HttpHttpClient,那么postget方法将返回可以subscribeobservable,并且回调总是异步执行的。

代码语言:javascript
复制
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(...)
}
票数 2
EN

Stack Overflow用户

发布于 2017-12-22 18:43:35

这实际上取决于应用程序的结构,但您可以使用async/await来完成以下操作:

代码语言:javascript
复制
async postAndGetData() {
  await this.http.post(postUrl, postData).toPromise();
  return this.http.get(getUrl).toPromise();
}

我会说,您的post请求返回所需的数据是有意义的,这样您就不必创建后续的get请求。

实现此目的的另一种方法是拥有一个以可观察到的方式保存数据并使用异步管道的服务:

代码语言:javascript
复制
<!-- 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());
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47945835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档