Асинхронно появляются id, по которым надо запросить информацию из внешнего API.
Запросы можно группировать в пачки до 1000 id в одном.
Появляются эти id волнами – то никого, то сразу много. Но каждый id приходит сам по себе.
Использование вижу примерно так:
import magic from 'откуда?'
magic.addEventListener('execute', (idsArray => callAPI(idsArray)));
// ...
someObject.addEventListener('myEvent', id => magic.add(id));
Надо организовать что-то типа бассейна, в который они будут наливаться, и сливаться на выполнение по достижению одного из двух условий:
- набралось больше 1000 – первую тысячу можно отправлять на выполнение;
- с момента поступления последнего прошло больше, чем X миллисекунд.
Как грамотно решить сие?
- пора открыть для себя чудный мир RxJS? – какой оператор поможет?
Похоже на bufferTime и на просто buffer – но как бы совместить оба?
- или есть в каком-нибудь lodash волшебный метод? (
debounce()
это не то) - или велосипед пишется в три строки?
Upd. сделал пока такую кривую реализацию:
spoiler
Но тут на setInterval()
проверка идёт, явно не так надо, и вообще неоптимально и на коленке. Какие есть промышленные решения?