【问题标题】:angular 6 wait post response角度 6 等待回复
【发布时间】:2019-02-28 19:52:38
【问题描述】:
var data2 = { data1Id: 0 };

postData(){

this._service1.save(data1).subscribe(res => {
          this.data2.data1Id = res.Data.Id; //res.Data.Id has valid data
     });

     this._service2.save(data2).subscribe(res => {
          console.log(this.data2.data1Id); //"this.data2.data1Id = 0" can't get value from service1
     });
}

如何从第一个服务或某些功能获取数据,让我解决问题运行调用服务序列。感谢收看!

【问题讨论】:

标签: javascript angular typescript


【解决方案1】:

使用 async/await 非常适合您的情况。由于 await 关键字,它将帮助您使您的代码更具可读性并抽象异步部分

aync post(){

    const res1 = await this._service1.save(this.data1).toPromise();
    const res2 = await this._service2.save(res1).toPromise();
    console.log('here is my data 2 ' + res2);

    return 'what you want, can be res1 or res2 or a string';
}

怎么称呼它?

this.myService.post().then( (whatYouWanted) => {
  console.log(whatYouWanted); // what you want, can be res1 or res2 or a string
});

【讨论】:

    【解决方案2】:

    使用 flatMap 链接 observables。

    this._service1.save(data1).flatMap(res => {
          this.data2.data1Id = res.Data.Id; //res.Data.Id has valid data
          return this._service2.save(data2).
     }).subscribe(res => {
          console.log(this.data2.data1Id); //"this.data2.data1Id = 0" can't get value from service1
     });
    

    【讨论】:

      【解决方案3】:
      this._service1.save(data1).flatMap(res => {
            this.data2.data1Id = res.Data.Id; //res.Data.Id has valid data
            return this._service2.save(data2);
       }).subscribe(res => {
            console.log(this.data2.data1Id); //"this.data2.data1Id = 0" can't get value from service1
       });
      

      你可以使用 flatMap 并返回第二个 observable 来链接它们。 文档:http://reactivex.io/documentation/operators/flatmap.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-18
        • 2020-06-10
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 2015-03-12
        相关资源
        最近更新 更多