Вы можете использовать throttleTime
с опцией trailing
для отправки последнего события.Последнее событие будет отправлено с заданной задержкой, а не сразу после прекращения изменения размера.
Поскольку вы также хотите, чтобы первое событие было отправлено, вам дополнительно требуется опция по умолчанию leading
.Если оба параметра установлены на true
, два события будут запускаться непосредственно одно за другим в конце и начале каждого нового временного интервала.Чтобы предотвратить это, вы можете добавить debounceTime
с небольшим временным интервалом, например, 50 мс.
import { fromEvent, asyncScheduler } from 'rxjs';
import { throttleTime, debounceTime, map } from 'rxjs/operators';
const source = fromEvent(window, 'resize').pipe(map(e => e.target['innerWidth']));
const width = source.pipe(
throttleTime(1000, asyncScheduler, { leading: true, trailing: true }),
debounceTime(50)
)
https://stackblitz.com/edit/typescript-qsjhvu