У меня есть служба загрузчика, результатом которой является Observable<string>
, которая содержит файл CSV. Каждая строка представляет отдельную сущность (например) объекта Person, разделенные запятыми части представляют свойство человека, например, id, возраст, имя и т. Д. c.
Сервисная функция загрузчика:
loadtTextFile(path: string): Observable<string>
Сервисная функция loadAllPerson:
loadAllPerson(): Observable<Array<Person>>
Я хотел бы вызвать loadtTextFile
в оболочке loadAllPerson
, где требуемый вывод: Observable<Array<Person>>
Как я могу гарантировать, что служба вернется только тогда, когда все строки CSV будут проанализированы в результате Observable<Array<Person>>
?
Возможно, сначала нужно дождаться результата loader service после анализа это в массив Person и возвращает результат в Observable<Array<Person>>
Следующая часть кода анализирует содержимое в Person Array, где contentObservable
является Observable<string>
const contentObservable = this.fileLoaderService.loadtTextFile();
contentObservable.mapTo(fileContent => {
const rowsOfContent = fileContent.split('\n');
rowsOfContent.forEach((row: string) => {
const cols = row.split(',');
// has valid numeric value of id and age?
if (!Number.isNaN(+cols[0]) && !Number.isNaN(+cols[3])) {
const person = new Person(+cols[0], cols[1], cols[2], +cols[3], cols[4],
cols[5], cols[6], cols[7], new Date(cols[8]));
personData.push(person);
}
});
console.log(JSON.stringify(personData));
});