Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免重复使用异步服务填充阵列_Javascript_Angular_Asynchronous_Rxjs_Rxjs5 - Fatal编程技术网

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()
呼叫,以及呼叫此方法之外的订户。

使用
集合
。这就是他们的目的。#