我有一个名字,值和初始名称的json。当用户点击提交时,我正在检查json的每个元素的值和初始值是相同还是不同。如果值和初始值不相同,那么我使用Rxjs调用服务调用。如果所有元素的initail值和值相同,则应显示错误消息“错误数据未更改”。但由于angular2调用是异步的,因此无法执行此操作。
我的json是这样的 -
Image
点击提交按钮我正在调用此功能 -
this.subscriptionList= [{name:"Chat Integration",value:false,initialValue:false},{name:"Dashboard Functionality",value:false,initialValue:false},
{name:"Quarterly Maintenance Window",value:false,initialValue:false},{name:"Remedy Planned Outages",value:false,initialValue:false},
{name:"Schedule Integration",value:false,initialValue:false}];
现在的问题是当我调用此函数时,对于Web调用发生了异步调用,并且流程直接转到if(anyChangeDetected == false)块并且每次我都收到该警报。 我怎么能避免它?
答案 0 :(得分:0)
forkJoin()
这是一个很好的用例。
首先创建一个包含更改元素的临时数组:
let changed = this.subscriptionList.filter(i => i.value != i.initialValue);
如果changed.length
为0,则可以在此处退出:
if (!changed.length) {
alert("Data is not changed");
return; // we can stop..
}
然后提交并收集订阅:
let subs = changed.map(i => this.remedyService.submitSubscription(i));
现在,当完成所有异步调用时,您可以使用forkJoin
来获取回调。
// DO EVERYTHING BEFORE SUBMITTING RESULTS
Observable.forkJoin(subs).subscribe(
subResults => {
// all subscribtions done ..
let result1 = subResults[0]; // result of first subscribtion
let resultx = subResults[x]; // result of x'th subscribtion
// DO EVERYTHING AFTER ALL SUBMITTED
});