gpt4 book ai didi

javascript - Angular2 使用 setInterval() 防止 .push() 中元素重复

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:30 25 4
gpt4 key购买 nike

我在 setInterval() 上触发一个函数,基本上每 30 秒执行一次 HTTP GET 调用,但是每次触发时都会复制数据插入数组中。

for() 的思想是找到状态为 AwaitingPicking 和 AwaitingCollection 的每个对象,然后将它们推送到各自的 >数组

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);
}

最佳答案

如果元素不存在,则仅推送到“awaitingPicking”和“awaitingCollection”数组。参见例如the answer to this question找到一种方法来做到这一点(当然,您需要重构为 typescript )。

例如,您可以将类似以下内容添加到您的类中(您还需要为 waitingCollection 实现此功能):

private pushAwaitingPickingIfNew(element: any): void {
if(!this.awaitingPicking.some(a => a == element)) {
this.awaitingPicking.push(element);
}
}

然后替换

this.awaitingPicking.push(element)

this.pushAwaitingPickingIfNew(element);

关于javascript - Angular2 使用 setInterval() 防止 .push() 中元素重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40864412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com