Я пытаюсь загрузить несколько файлов на сервер последовательно. Перед следующей итерацией мне нужен результат первой итерации. Я пробовал много решений с помощью RxJS, особенно с concatMap, но безуспешно.
В итоге я использовал асинхронный метод и ждал каждого ответа, прежде чем перейти к следующей итерации, как показано ниже. Мне было бы интересно посмотреть, можно ли добиться этого исключительно с помощью Rxjs.
private getDocumentData(files: any): void {
this.myService.getDoc(this.id))
.pipe(takeUntil(this.destroy$))
.subscribe(document => {
this.uploadMultipleFiles(document, files);
});
}
async updateDoc(document: any, files: any) {
for (let i = 0; i < files.length; i++) {
let updatedDocObj = {
...document,
file: {
date: files[i].lastModified,
fileName: files[i].name,
},
};
const success = await this.myService.uploadMultipleFiles(
updatedDocObj,files[i]);
}
}





вот подход только для rxjs, заключающийся в последовательном сохранении данных и использовании последних данных в следующем вызове?
export class Site7Component {
private readonly data = [
{ id: 1, name: 'Max', value: 100 },
{ id: 2, name: 'Moritz', value: 200 },
{ id: 3, name: 'Franz', value: 300 },
];
ngOnInit(): void {
from(this.data)
.pipe(
concatMap((item) => this.saveData(item)),
scan((acc, curr) => [...acc, this.doSth(acc, curr)], [] as any[])
)
.subscribe((result) => {
console.info(result);
});
}
private saveData(data: any): Observable<any> {
return new Observable((observer) => {
//place for the HTTP CALL
setTimeout(() => {
observer.next(data);
observer.complete();
}, 1000);
});
}
private doSth(acc: any[], curr: any): any {
console.info(acc);
if (!acc || !acc[acc.length - 1]) {
return curr;
}
return { ...curr, value: curr.value * (acc[acc.length - 1].id + 5) };
}
}Зачем использовать setTimeout? Что делать, если данные не сохранились в течение секунды?
@ gables20 Timout — это просто моя версия асинхронного вызова. Вероятно, у вас там ОТДЫХ. Мне просто нужно было что-то, что «требует времени» в примере
обновлено. происходит из другого метода, который получает информацию из API