observable.ru.md
54 lines
| 2.2 KiB
| text/x-minidsrc
|
MarkdownLexer
|
|
r22 | # Observable | |
| Универсальный способ организации потока сообщений. Данный механизм может | |||
| использоваться для оповещения об изменениях состояний объектов или для доставки | |||
| самостоятельных событий, например, связанных с действиями пользователя. | |||
| Является реализацией классического наблюдателя с возможность сообщить о коце | |||
| потока событий. Данная реализация не содержит никаких дополнительных функций, | |||
| таких как фильтрация, канал с состоянием, преобразования сообщений и т.п. Это | |||
| сделано специально, чтобы реализация оставалась максимально простой. | |||
| Пример того, как можно создать последовательность из 10 событий: | |||
| ```ts | |||
| var events = new Observable(async (notify, error, complete) => { | |||
| // цикл в котором возникает событие | |||
| for(let i = 0; i < 10; i++) { | |||
| await delay(1000); | |||
| // в качестве данных передается номер события | |||
| notify(i); | |||
| } | |||
| // по окончании последовательности информируем, что событий больше не будет | |||
| compelte(); | |||
| }); | |||
| // создаем окно с отображением хода событий | |||
| var progress = showProgress({ min: 0, max: 9, current: 0}); | |||
| // подписываемся на события | |||
| events.on( | |||
| // обработчик очередного события | |||
| msg => { | |||
| progress.setValue(msg); | |||
| }. | |||
| // обработчик ошибки | |||
| e => { | |||
| progress.showError(e); | |||
| }, | |||
| // обработчик конца потока | |||
| () => { | |||
| progress.close(); | |||
| } | |||
| ); | |||
| ``` | |||
| ```ts | |||
| // превращаем события dom в Observable | |||
| var events = new Observable((notify) => { | |||
| on(domNode,'mousemove', notify); | |||
| }); | |||
| ``` |
