代码之家  ›  专栏  ›  技术社区  ›  Aeseir

在BehaviourSubject数组中查找值,否则进行调用

  •  0
  • Aeseir  · 技术社区  · 3 年前

    我正在努力找出执行以下方法的最佳方式。

    按ID在BehaviourSubject数组中搜索值;如果值exist将其返回为可观察的,否则如果它不存在,则调用以从服务器检索它。一旦从服务器检索到数据,BehaviourSubject数组就会更新以添加缺失的值。

    private _carList = new BehaviorSubject<any[] | null>(null);
    carList$ = this._carList.asObservable();
    
    getById(id: string) {
        var value = this._carList.value?.find(r => r.id === id);
        return value ? of(value) : this.getCarDataFromServer(id);
    }
    

    这似乎是一种效率低下/不干净的方式,如果有更好的方法来执行,我们将不胜感激。

    编辑1:

    getCarDataFromServer从服务器获取数据,返回可观察的并行更新_carList BehaviourSubject。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Kazi Akib Javed    3 年前

    您可以在loaderService中创建一个this BehaviorSubject,然后从loaderService调用它。以及主题中的.next()最新getCarDataFromServer。