#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;
})
);
}
- Компилятор продолжает жаловаться, что «Аргумент типа ‘CollectorIssueValue[]’ нельзя присвоить параметру типа ‘CollectorIssueValue’, который сразу говорит мне, что я все еще возвращаю массив.
- Значение, возвращаемое функции подписки, действительно является массивом.
Итак, что я делаю не так? «single» показался подходящим оператором для use…am Я использую это неправильно?
Ответ №1:
один обратный вызов выполняется CollectorIssueValue[]
с каждым наблюдаемым тиком. Если вы хотите изменить CollectorIssueValue[]
на CollectorIssueValue
, я предлагаю использовать filter и map. Filter отфильтрует пустые массивы, а map преобразует непустой массив из CollectorIssueValue
в CollectorIssueValue
.
например:
.pipe(
filter(arr => arr.length > 0),
map(arr => arr.find(...),