Как с помощью RxJS положить значение в переменную?

Есть функция:

getData (id: number, objectId: number): Observable<ObjectData | undefined> {
  let res$;
  if (!this.objectData.length) {
    this.loadObjectData(id)
    .subscribe((objectData) => {
        res$ = objectData.find((i: ObjectData) => i.id === objectId);
      },
    );
  } else {
    res$ = this.objectData.find((i: ObjectData) => i.id === objectId);
  }
  return of(res$);
}

как мне сделать так, что при условии if (!this.objectData.length) функция дожидалась выполнения загрузки и помещала значения в переменную res$?


Ответы (1 шт):

Автор решения: Sergey Glazirin

Не нужно присваивать значение в переменную, а сразу верните Observable, а чтобы преобразовать данные используйте pipe и метод .map().

getData(id: number, objectId: number): Observable<ObjectData | undefined>{  
    if (!this.objectData.length) {
      return this.loadObjectData(id).pipe(map((objectData) => objectData.find((i: ObjectData) => i.id === objectId)
  ))
    } else {
      return of(this.objectData.find((i: ObjectData) => i.id === objectId));
  }
}

В таком случае, вам не нужно ждать, когда закончится подписка. А все ожидание будет уже там, где будет вызван метод getData

→ Ссылка