delay
import { delay } from 'patronum';
// or
import { delay } from 'patronum/delay';
delay({ source, timeout: number, target })
Formulae
target = delay({ source, timeout: number, target });
- When
source
is triggered, wait fortimeout
, then triggertarget
with payload of thesource
Arguments
source
(Event<T>
|Store<T>
|Effect<T>)
— Source unit, data from this unit used to triggertarget
with.timeout
(number)
— time to wait before triggerevent
target
(Event<T>
|Store<T>
|Effect<T
>)` — Optional. Target unit, that should be called after delay.
Returns
event
(Event<T>)
— New event, that triggered after delay
Example
import { createEvent } from 'effector';
import { delay } from 'patronum/delay';
const trigger = createEvent<string>(); // createStore or createEffect
const delayed = delay({ source: trigger, timeout: 300 });
delayed.watch((payload) => console.info('triggered', payload));
trigger('hello');
// after 300ms
// => triggered hello
delay({ source, timeout: Function, target })
Motivation
This overload allows to calculate timeout from payload of source
.
It is useful when you know that calculations requires more time if you have more data for payload.
Formulae
target = delay({ source, timeout: Function, target });
- When
source
is triggered, calltimeout
with payload to get the timeout for delay, then triggertarget
with payload of thesource
Arguments
source
(Event<T>
|Store<T>
|Effect<T>)
— Source unit, data from this unit used to triggertarget
with.timeout
((payload: T) => number)
— Calculate delay for eachsource
call. Receives the payload ofsource
as argument. Should returnnumber
— delay in milliseconds.target
(Event<T>
|Store<T>
|Effect<T
>)` — Optional. Target unit, that should be called after delay.
Example
import { createEvent, createStore } from 'effector';
import { delay } from 'patronum/delay';
const update = createEvent<string>();
const logDelayed = createEvent<string>();
const $data = createStore('');
delay({
source: $data,
timeout: (string) => string.length * 100,
target: logDelayed,
});
logDelayed.watch((data) => console.log('log', data));
update('Hello');
// after 500ms
// => log Hello
update('!');
// after 100ms
// => log !
delay({ source, timeout: Store<T>, target })
Motivation
This overload allows you to read timeout from another store. It is useful when you writing music editor and need dynamic delay for your events.
Formulae
target = delay({ source, timeout: $store, target });
- When
source
is triggered, read timeout fromtimeout
store, then triggertarget
with payload of thesource
Arguments
source
(Event<T>
|Store<T>
|Effect<T>)
— Source unit, data from this unit used to triggertarget
with.timeout
(Store<number>)
— Store with number — delay in milliseconds.target
(Event<T>
|Store<T>
|Effect<T
>)` — Optional. Target unit, that should be called after delay.
Example
import { createEvent, createStore } from 'effector';
import { delay } from 'patronum/delay';
const update = createEvent<string>();
const $timeout = createStore(500);
const logDelayed = delay({
source: update,
timeout: $timeout,
});
logDelayed.watch((data) => console.log('log', data));
update('Hello');
// after 500ms
// => log Hello