我有 3 个功能和一个按钮。我想按下按钮并不是同时调用 3 个函数
,而是一个接一个地调用,因此每个函数都会等待另一个(前一个函数)完成
我有一个 onPost、
onGet
和 navigate
函数
我想做的是调用一个函数allTogether
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()
onGet() {
this._httpService.getCurrentState(this.model.user_email, this.model.client)
.subscribe(
// data => this.getData = JSON.stringify(data),
data => this.getData = data,
error => alert(error),
);
}
navigation () {
let part = json.message.part;
let num = json.message.number;
this.router.navigate(['part'], {queryParams: {'number': 'num'}});
}
我尝试使用订阅,但失败了...那么云我如何实现函数 allTogether()
else ?我测试了所有功能,它们单独工作,但一起工作..
最佳答案
您可以使用 Observable.forkJoin
运算符使第三个函数等待前两个函数的结果。我发现它们之间的数据并不相互依赖。您还必须修改 onPost
和 onGet
,以便它们返回 observables
。
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();
});
关于javascript - Angular2中如何调用多个函数,让它们互相等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45826880/