Хотите ли вы, чтобы генерация миниатюр осуществлялась только последовательно или генерация второго миниатюры также должна ждать завершения загрузки первого?
Если вы не хотите ждать загрузки,вам просто нужно объединить их:
import { of, from, } from 'rxjs';
import { concatMap } from 'rxjs/operators';
const imageObservable = of(1, 2, 3, 4, 5);
function generateThumbnail(image) {
console.log(`Generating thumbnail ${image}`);
return new Promise(resolve => {
setTimeout(() => {
console.log(`Finished generating thumbnail ${image}`);
resolve({
image,
thumbnail: `This is a thumbnail of image ${image}`
});
}, 1500);
});
}
async function upload(imagePromise) {
const image = await imagePromise;
console.log('Uploading', image);
return new Promise(resolve => {
setTimeout(() => {
console.log('Finished uploading', image);
resolve();
}, 1500);
});
}
// imageObservable.pipe(map(generateThumbnail)).subscribe(upload);
imageObservable.pipe(concatMap(image => from(generateThumbnail(image)))).subscribe();
concatMap делает то, что вы хотите, и я только что сделал Observable
из вашего Promise
с оператором создания from
, которыйЯ не думаю, что это необходимо.Но обычно проще работать с Observables
вместо Promises
при использовании RxJs.
function generateThumbnail(image): Observable<any> {
console.log(`Generating thumbnail ${image}`);
return from(
new Promise(resolve => {
setTimeout(() => {
console.log(`Finished generating thumbnail ${image}`);
resolve({
image,
thumbnail: `This is a thumbnail of image ${image}`
});
}, 1500);
})
);
}
Редактировать: Можете ли вы попробовать это?
imageObservable
.pipe(
concatMap(image => generateThumbnail(image)),
concatMap(image => upload(image))
)
.subscribe();