У меня есть большое наблюдаемое значение, где я хочу разбить его на фиксированные размеры, а затем выдавать каждый фрагмент с задержкой до завершения.
Чтобы быть немного более конкретным, мой сценарий - это то, где я могу иметь много данных для отправки на сервер через HTTP-запрос, где для каждого значения нужен отдельный HTTP-запрос. Поэтому, если у меня есть 1000 ожидающих бит данных, я не хочу выполнять 1000 HTTP-запросов сразу, я могу сказать «сделать 10», а затем задержать на короткое время (возможно, на пару секунд).
Я предполагаю, что здесь должен использоваться оператор buffer
, но не могу заставить его делать то, что я хочу. Я просмотрел много примеров, но так и не нашел тот, который делает именно это.
Вот простой пример, я пытался (но не правильно) ...
import { interval,of , range} from 'rxjs';
import { buffer, bufferTime, delay, throttleTime, bufferCount, take } from 'rxjs/operators';
const source = range(1,1000);
const example = source.pipe(bufferCount(10), delay(5000));
const subscribe = example.subscribe(val =>
console.log('output:', val)
);
Также доступно здесь, на stackblitz
Глядя на вывод, мы можем увидеть, делит ли их на блоки по 10, но затем он просто ждет 5000 мс и выводит их все.
Я бы хотел, чтобы первые 10 запускались сразу, а затем каждое последующее задерживалось, в данном случае на 5 секунд.
У кого-нибудь есть какие-нибудь указания, как это сделать?
Заранее спасибо.