angular2 2异步调用

时间:2017-02-15 08:48:00

标签: angular asynchronous

Angular2,typescript

我有一个组件,一次从服务器显示1个对象。

单击按钮,表单会对对象执行某些操作,将数据发送到服务器。在下一行中,立即获得下一个对象。

quantlib-users@lists.sourceforge.net

但是有一种竞争条件,即在updateTags ajax到达服务器之前,获取下一个对象的ajax到达服务器。

updateTags代码是

this.rawS.updateTags({......}); //Update object
this.candidateC.footerNavigateTo(.....);//Get next object

doPost的代码是

  updateTags(rawCandidate) {
    this.baseAjaxService.doPost(this.baseUrl + 'tags/update', rawCandidate)
      .subscribe(data => {
        console.log(data);
      });
  }

' continue_screening'的路线有一个路线解析器带来下一个对象。

如何确保foottoNavigateTo()仅在updateTags完成其完整周期后运行?

2 个答案:

答案 0 :(得分:2)

如果你想要的是根据调用函数updateTags(rawCandidate)的位置而有不同的行为,我建议采用以下解决方案:

  updateTags(rawCandidate, action) {
    this.baseAjaxService.doPost(this.baseUrl + 'tags/update', rawCandidate)
      .subscribe(
       data => {
        action(data);

      },
      error => {
          console.log("error"); //handle error here
      });
  }

然后你可以这样调用这个函数:

updateTags(rawCandidate, function(data){
   console.log(data);
   this.candidateC.footerNavigateTo(.....);//here you can use data
});

答案 1 :(得分:1)

你想在这里实现的是将你的两个http调用链接起来,以某种方式使它们成为依赖者。在Angular 1.X中,它将使用promise完成,但使用AngularJS 2,您可以使用 flatMap 来实现。

从属通话部分看到此链接http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

PS:如本帖(Combining promises in Angular 2)所示,如果您对它更熟悉,也可以使用Paint()将您的Observable(即您的异步http调用)转换为Promise。 / p>