Я бы предложил взглянуть на этот подход, своего рода вариацию того, что @martin писал ранее.
У вас есть 2 ингредиента:
- список имен файлов (
files
) вы получаете откуда-то (например, службу, которую вы вызываете) - функцию (
readFile
), которая читает каждый файл - давайте предположим, что такая функция возвращает Observable, который испускается, когда содержимое файла читается и уведомляетсамо содержимое файла
Вы можете создать Observable, который будет выдавать имя файла для чтения, каждое излучение будет удалено с определенной задержкой (в вашем случае 800 мс), а затем ждать x
мсперед повторением.Примерно так
const files = [
'F1',
'Second file',
'3rd file',
'file n 4'
];
const imagesToShow = from(files).pipe(
mergeMap(f => of(f).pipe(delay(800)), 1)
);
const imagesToShowRepeated = imagesToShow.pipe(
delay(5000),
repeat()
)
Теперь вы можете использовать exhaustMap
, чтобы получить то, что вы хотите, если мое понимание правильно, как в следующих строках
const loadFile = (fileName: string) => {
return of(fileName).pipe(delay(Math.random()*2000)); // simulates the function reading a file
}
const animation = imagesToShowRepeated.pipe(
exhaustMap(file => loadFile(file))
)