У меня есть следующий код
getFileAsync(fieldFiles: Array<FileFields>): Observable<Array<UploadFile>> {
const files = Array<UploadFile>();
const downloads = Array<Observable<any>>();
fieldFiles.forEach(file => {
downloads.push(FileHelper.downloadFile(file.file_id));
});
forkJoin(downloads).subscribe({
next: filesData => {
console.log(filesData)
fieldFiles.forEach((file, index) => {
const fileData = filesData[index];
files.push({
uid: file.file_id,
name: file.filename,
url: fileData ? window.URL.createObjectURL(new Blob([fileData.data], {type: file.contentType})) : require('../../../assets/images/file.png'),
size: file.size,
type: file.contentType,
})
})
},
error: () => {}
});
}
По сути, у меня есть список файлов, и я хотел бы загрузить их один за другим:
Я использую FileHelper.downloadFile
, которые возвращаютhttp observable
const downloads = Array<Observable<any>>();
fieldFiles.forEach(file => {
downloads.push(FileHelper.downloadFile(file.file_id));
});
Затем я использую forkJoin (загрузки), чтобы отправить запрос и получить ответы. Но я хотел бы вместо этого использовать concatMap
и загружать файл по одному.
Но проблема в том, что запрос http не возвращает идентификатор файла, поэтому мне нужен способ узнать, что это за идентификатор. в настоящее время тот, который загружается. Примерно так:
const downloads = Array<Observable<any>>();
fieldFiles.forEach(file => {
const fileId = file.file_id;
downloads.push(FileHelper.downloadFile(fileId));
});
concatMap(downloads).subscribe({
next: (filesData, fileId) => {}
Есть ли способ добавить эту переменную и «связать» ее с наблюдаемой http-запроса?