В моем проекте Angular 8 у меня есть скрипт search.service.ts со следующими функциями:
export class SearchService {
person;
constructor(private http: HttpClient) { }
getAll(): Observable<any> {
// tslint:disable-next-line: max-line-length
return this.http.get('https://gist.githubusercontent.com/glitchedmob/373e1ebf69d2c90cbf1a98322b0d77b7/raw/2ab6ab26f6dd9b763ff9fe725454ed7e4492f80d/breakingbadcharacters.json');
}
search(): Observable<any> {
this.getAll().subscribe((users) => {
console.log('TARGET USER: ');
console.log(users[5]);
this.person = users[5];
return this.person;
});
console.log('TARGET: ' + this.person); // fires before getAll().subscribe printing 'undefined'
return EMPTY;
}
}
Функция getAll () работает и просто возвращает все данные из API. Функция search () - вот где у меня проблемы. Поскольку API не является службой REST, мне нужно получить все содержимое API, но снова вызвать getAll () и вернуть один элемент массива.
Обе функции используются в качестве ответов на нажатие кнопки и возвращаемых данных. печатается на экране. getAll () возвращает несколько записей, в то время как search (), как ожидается, вернет только одну.
Моя попытка вернуть отдельный элемент массива путем подписки на наблюдаемую запись getAll () не работает. Если я опускаю return EMPTY
и пытаюсь вернуть данные из анонимной функции подписки, я получаю следующую ошибку:
ОШИБКА TypeError: Невозможно прочитать свойство 'subscribe' из неопределенного