使用angular2的同步网络连接

时间:2016-09-22 17:23:16

标签: angular ionic2 angular2-services angular2-observables

我有一个名字,值和初始名称的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)块并且每次我都收到该警报。 我怎么能避免它?

1 个答案:

答案 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

   });