首页 / JAVASCRIPT / [Javascript] Broadcaster + Operator + Listener pattern -- 12. Repeat a broadcaster that is DONE
[Javascript] Broadcaster + Operator + Listener pattern -- 12. Repeat a broadcaster that is DONE
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[Javascript] Broadcaster + Operator + Listener pattern -- 12. Repeat a broadcaster that is DONE,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1896字,纯文字阅读大概需要3分钟。
内容图文
![[Javascript] Broadcaster + Operator + Listener pattern -- 12. Repeat a broadcaster that is DONE](/upload/InfoBanner/zyjiaocheng/623/2bf39aa3551f434c80be4de549ddb532.jpg)
After a broadcaster is "done", starting it up again requires calling the broadcaster with the same listener. This creates a kind of "async recursion" where you pass the listener back into the broadcaster each time you set it up. This lesson walks through creating a repeat operator that can start a broadcaster over.
Idea for Repeat operator, is that when source broadcaster emit done, then in repeat operator call the broadcaster(repeatListener) again.
let repeat = (broadcaster) => (listener) => { let cancel; let repeatListener = (value) => { if (value === done) { if (cancel) { cancel(); } cancel = broadcaster(repeatListener); return; } listener(value); }; cancel = broadcaster(repeatListener); return () => { cancel(); }; };
import { createTimeout, done } from "./broadcasters"; import { hardCode } from "./operators"; let repeat = (broadcaster) => (listener) => { let cancel; let repeatListener = (value) => { if (value === done) { if (cancel) { cancel(); } cancel = broadcaster(repeatListener); return; } listener(value); }; cancel = broadcaster(repeatListener); return () => { cancel(); }; }; let one = repeat(hardCode("hi")(createTimeout(1000))); let cancel = one(console.log); setTimeout(() => { cancel(); }, 5000); // broadcasters.js import { curry } from "lodash" export let done = Symbol("done") export let createTimeout = curry((time, listener) => { let id = setTimeout(() => { listener(null) listener(done) }, time) return () => { clearTimeout(id) } }) // operators.js import { curry } from "lodash"; import { done } from "./broadcasters"; let createOperator = curry((operator, broadcaster, listener) => { return operator((behaviorListener) => { return broadcaster((value) => { if (value === done) { listener(done); return; } behaviorListener(value); }); }, listener); }); export let hardCode = (newValue) => createOperator((broadcaster, listener) => { let cancel = broadcaster((value) => { listener(newValue); }); return () => cancel(); });
内容总结
以上是互联网集市为您收集整理的[Javascript] Broadcaster + Operator + Listener pattern -- 12. Repeat a broadcaster that is DONE全部内容,希望文章能够帮你解决[Javascript] Broadcaster + Operator + Listener pattern -- 12. Repeat a broadcaster that is DONE所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。