[Javascript] Broadcaster + Operator + Listener pattern -- 13. Repeat When Done with a Repeat Operator
JavaScript -- with 13 when pattern Operator listener
2023-09-14 09:00:46 时间
Apps often have scenarios where one event controls another. In operators, this requires passing one broadcaster in and using it to control another broadcaster. You can think, "when this broadcaster fires, do that with the other broadcaster". This lesson covers using one broadcaster to control when another broadcaster repeats.
import { addListener, done, forOf } from "./broadcasters"; const log = console.log; // only when listener receive DONE event // then broadcaster should trigger the listener again // otherwise, keep emit value let repeat = (broadcaster) => (listener) => { let cancel; let repeatListener = (value) => { // when it is doen event if (value === done) { // because it is repeated event // need to cancel previous one if (cancel) { cancel(); } // broadcaster should trigger the listener again cancel = broadcaster(repeatListener); return; } // otherwise, keep emitting value listener(value); }; cancel = broadcaster(repeatListener); return () => cancel(); }; // Only when 'whenBroadcater' happen then do the repeat logic let repeatWhen = (whenBroadcaster) => (mainBroadcaster) => (listener) => { let mainCancel; let whenCancel; let repeatListener = (value) => { if (value === done) { if (mainCancel) { mainCancel(); } whenCancel = whenBroadcaster(() => { // cancel previous when broadcaster whenCancel(); mainCancel = mainBroadcaster(repeatListener); }); } listener(value); }; mainCancel = mainBroadcaster(repeatListener); return () => { mainCancel(); whenCancel(); }; }; const inputClick = addListener("#input", "click"); const printCat = forOf("cat"); const repeatCatOnClick = repeatWhen(inputClick)(printCat); const cancel = repeatCatOnClick(log); setTimeout(() => { cancel(); }, 3000);
相关文章
- javascript 基础_JavaScript高级编程
- javascript_JavaScript走向成熟
- javascript html转换成markdown,如何使用Turndown使用JavaScript将HTML转换为Markdown[通俗易懂]
- 怎么学JavaScript?
- 用javascript分类刷leetcode--位运算(图文视频讲解)
- 用javascript分类刷leetcode--双指针(图文视频讲解)
- 使用JavaScript的padStart()和padEnd()格式化字符串的技巧
- JavaScript学习总结(九)——Javascript面向(基于)对象编程详解编程语言
- JavaScript学习总结(五)——Javascript中==和===的区别详解编程语言
- 浅谈javaScript的数据类型详解编程语言
- 权威JavaScript中的内存泄露模式
- Javascript更新JavaScript数组的uniq方法
- CSS布局中可以用javascript判断浏览器版本
- Javascript阻止javascript事件冒泡,获取控件ID值
- asp(javascript)全角半角转换代码dbc2sbc
- JavaScript对象链式操作代码(jquery)
- javascript学习笔记(三)显示当时时间的代码
- JavaScript高级程序设计阅读笔记(十六)javascript检测浏览器和操作系统-detect.js
- javascript对JSON数据排序的3个例子
- BAT及各大互联网公司2014前端笔试面试题--JavaScript篇