Javascript 避免重复使用异步服务填充阵列
我有一个组件,它从服务中获取内容以进行处理。问题是我可以多次调用这个函数,这会在我的数组中产生重复。我需要以下解决方法:Javascript 避免重复使用异步服务填充阵列,javascript,angular,asynchronous,rxjs,rxjs5,Javascript,Angular,Asynchronous,Rxjs,Rxjs5,我有一个组件,它从服务中获取内容以进行处理。问题是我可以多次调用这个函数,这会在我的数组中产生重复。我需要以下解决方法: getOptions():可观察{ console.log(“我的长度:”,this.options.LENGTH)//在推送之前检查重复项 this.championService.getChampions() .订阅(冠军=>{ champions.forEach(champion=>{ if(champions.indexOf(champion)=-1) this.op
getOptions():可观察{
console.log(“我的长度:”,this.options.LENGTH)//在推送之前检查重复项
this.championService.getChampions()
.订阅(冠军=>{
champions.forEach(champion=>{
if(champions.indexOf(champion)=-1)
this.options.push(新PickQuality(champion,0));
});
这个。重新评估();
this.options subject.next(this.options);
});
我建议您稍微调整一下代码结构:
if (this.options.length == 0) {
let source = this.championService.getChampions()
.share();
source.subscribe(champions => {
// ... whatever
this.options = whateverResult;
});
return source;
} else {
return Observable.of(this.options);
}
现在,您可以避免使用主题并返回表示HTTP请求的源Observable,该源Observable通过share()
操作符共享。这意味着只有一个HTTP请求,其结果将发送到此内部subscribe()
呼叫,以及呼叫此方法之外的订户。使用集合
。这就是他们的目的。#