Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何调用多个函数,以便它们在Angular2中相互等待_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 如何调用多个函数,以便它们在Angular2中相互等待

Javascript 如何调用多个函数,以便它们在Angular2中相互等待,javascript,angular,typescript,Javascript,Angular,Typescript,我有3个功能和一个按钮。我想按下按钮并调用3函数,但不是同时调用,而是一个接一个地调用,因此每个函数都会等待另一个(上一个函数)完成 我有一个onPost、onGet和导航功能 我想做的是一起调用函数 allTogether() { this.onPost(); this.onGet(); this.navigate(); } 这是我的onPost方法,我将当前客户端的数据发送到后端 onPost () { const messageForDb = (JSON.string

我有3个功能和一个按钮。我想按下按钮并调用
3函数
,但不是同时调用,而是一个接一个地调用,因此每个函数都会等待另一个(上一个函数)完成

我有一个
onPost、
onGet
导航
功能 我想做的是一起调用函数

allTogether() {

 this.onPost();
 this.onGet();
 this.navigate();

}
这是我的
onPost
方法,我将当前客户端的数据发送到后端

 onPost () {
    const messageForDb = (JSON.stringify(this.model));
    localStorage.setItem('userKey', messageForDb);
    this._httpService.postJSON(this.model)
      .subscribe(
        data => this.postData = JSON.stringify(data),
        error => alert(error),
      );
  }
这是我的
onGet()
,我在这里获得了关于我的客户机的信息,因此我可以稍后在第三个函数
navigation()


我尝试使用subscribe,但失败了……那么,cloud I如何实现函数
allother()
else呢?我测试了所有功能,它们分别工作,但都在一起

您只需要从subscribe函数中分配数据的部分调用下一个方法

onPost () {
    const messageForDb = (JSON.stringify(this.model));
    localStorage.setItem('userKey', messageForDb);
    this._httpService.postJSON(this.model)
      .subscribe(
           data => { this.postData = JSON.stringify(data); this.onGet();},
           error => alert(error),
  );
}

onGet() {
    this._httpService.getCurrentState(this.model.user_email, 
    this.model.client)
      .subscribe(
       // data => { this.getData = JSON.stringify(data); this.navigate(); },
        data => { this.getData = data; this.navigate(); },
        error => alert(error),
  );

}

您只需要从分配数据的订阅函数部分调用下一个方法

onPost () {
    const messageForDb = (JSON.stringify(this.model));
    localStorage.setItem('userKey', messageForDb);
    this._httpService.postJSON(this.model)
      .subscribe(
           data => { this.postData = JSON.stringify(data); this.onGet();},
           error => alert(error),
  );
}

onGet() {
    this._httpService.getCurrentState(this.model.user_email, 
    this.model.client)
      .subscribe(
       // data => { this.getData = JSON.stringify(data); this.navigate(); },
        data => { this.getData = data; this.navigate(); },
        error => alert(error),
  );

}

您可以使用
Observable.forkJoin
操作符使第三个函数等待前2个函数的结果。我看到他们之间的数据并不相互依赖。您还必须修改
onPost
onGet
,以便它们返回
可观察值

onPost () {
    const messageForDb = (JSON.stringify(this.model));
    localStorage.setItem('userKey', messageForDb);
    return this._httpService.postJSON(this.model);
 }

onGet() {
        return this._httpService.getCurrentState(this.model.user_email, this.model.client);
  }

Observable.forkJoin([this.onPost(), this.onGet()])
   .subscribe((resultArray) => {
     [postResult, getResult] = resultArray;
     this.postData = JSON.stringify(postResult);
     this.getData = getResult;
     this.navigation();
   });

您可以使用
Observable.forkJoin
操作符使第三个函数等待前2个函数的结果。我看到他们之间的数据并不相互依赖。您还必须修改
onPost
onGet
,以便它们返回
可观察值

onPost () {
    const messageForDb = (JSON.stringify(this.model));
    localStorage.setItem('userKey', messageForDb);
    return this._httpService.postJSON(this.model);
 }

onGet() {
        return this._httpService.getCurrentState(this.model.user_email, this.model.client);
  }

Observable.forkJoin([this.onPost(), this.onGet()])
   .subscribe((resultArray) => {
     [postResult, getResult] = resultArray;
     this.postData = JSON.stringify(postResult);
     this.getData = getResult;
     this.navigation();
   });