【问题标题】: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