我在setInterval()
上触发一个功能,基本上每30秒进行一次HTTP GET
次呼叫,但是每次触发它时都会重复数据,因为它们在数组中被推送。
for()
的想法是查找状态为objects
的每个AwaitingPicking and AwaitingCollection
,然后将其推送到各自的array
。
private awaitingPicking: any = [];
private awaitingCollection: any = [];
constructor(private sharedService: SharedService, private http: Http) {
setInterval(() => {
this.getOrdersFromOrigin();
}, 10000);
}
getOrdersFromOrigin() {
this.isLoading = true;
this.sharedService.getOriginSite()
.subscribe(data => {
this.isLoading = false;
for (var i = 0; i < data.Results.length; i++) {
var element = data.Results[i];
if (element.OrderLineGroups[0] && element.OrderLineGroups[0].Status == 'AwaitingPicking') {
this.awaitingPicking.push(element);
} else if (element.OrderLineGroups[0] && element.OrderLineGroups[0].Status == "AwaitingCollection") {
this.awaitingCollection.push(element);
}
}
},
err => {
this.isLoading = false;
});
}
每次setInterval()
触发时,有没有办法防止数据重复?
我尝试过类似下面的代码,但它仍然复制元素。
if(this.awaitingPicking.indexOf(element) === -1){
this.awaitingPicking.push(element);
}
答案 0 :(得分:1)
只推动等待采摘&#34;和等待收集&#34;等待收集&#34;数组如果元素不存在。参见例如the answer to this question有一种方法可以做到这一点(你需要对当前的打字稿进行重构)。
例如,你可以在你的类中添加类似下面的东西(你还需要为awaitingCollection实现这个):
private pushAwaitingPickingIfNew(element: any): void {
if(!this.awaitingPicking.some(a => a == element)) {
this.awaitingPicking.push(element);
}
}
然后替换
this.awaitingPicking.push(element)
与
this.pushAwaitingPickingIfNew(element);