RxJS: Как вернуть наблюдаемое из наблюдаемого?

#rxjs #observable

#rxjs #наблюдаемое

Вопрос:

Я вызываю веб-службу, которая возвращает список. Я хочу вернуть один элемент из этого списка в методе. По сути, когда какая-либо функция запрашивает экземпляр CollectorIssueBase, я хочу извлечь их ВСЕ, кэшировать их и вернуть запрошенный. Но я не могу понять, как это сделать. Вот мой код:

   public getByID(collectorID: string, id: string): Observable<CollectorIssueBase> {
    return this.getAllMinimized(collectorID).pipe(
        single(items => {
            var item = items.find(i => i.ID == id);
            return item;
          })
      );
  }
  
  1. Компилятор продолжает жаловаться, что «Аргумент типа ‘CollectorIssueValue[]’ нельзя присвоить параметру типа ‘CollectorIssueValue’, который сразу говорит мне, что я все еще возвращаю массив.
  2. Значение, возвращаемое функции подписки, действительно является массивом.

Итак, что я делаю не так? «single» показался подходящим оператором для use…am Я использую это неправильно?

Ответ №1:

один обратный вызов выполняется CollectorIssueValue[] с каждым наблюдаемым тиком. Если вы хотите изменить CollectorIssueValue[] на CollectorIssueValue , я предлагаю использовать filter и map. Filter отфильтрует пустые массивы, а map преобразует непустой массив из CollectorIssueValue в CollectorIssueValue .

например:

 .pipe(
  filter(arr => arr.length > 0),
  map(arr => arr.find(...),