[Javascript] Broadcaster + Operator + Listener pattern -- 25. Save Network Requests by Using a Cache
Caches exist to make things faster (at the expense of taking up more memory and possibly outdated results). Our live search is a great use case for implementing a cache, so let's set up a mapBroadcasterCache
operator which can map a string to the result of a broadcaster.
export let mapBroadcasterCache = createBroadcaster => broadcaster => listener => { let cache = new Map() let cancel return broadcaster(value => { // abort previous if (cancel) { cancel() return; } if (cache.has(value)) { listener(cache.get(value)) return } let newBroadcaster = createBroadcaster(value) cancel = newBroadcaster((newValue) => { // Add to cache only if newValue isn't an error if (!(newValue instanceof Error)) { cache.set(value, newValue) } console.log(cache) listener(newValue) }) }) }
export let ignoreError = broadcaster => listener => { return broadcaster((value) => { if (value instanceof Error) { return } listener(value) }) }
Using:
let inputToBooks = pipe( filter(name => name.length > 3), waitFor(150), pipe( map(name => `https://openlibrary.org/search.json?q=${name}`), mapBroadcasterCache(getUrl), ignoreError, map(json => json.docs) ))(inputValue)
分类:
Compose
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-12-09 [Algorithm] 242. Valid Anagram
2019-12-09 [Algorithm] 155. Min Stack
2017-12-09 [Python] Format Strings in Python
2017-12-09 [Python] Execute a Python Script
2017-12-09 [Python] Understand Mutable vs. Immutable objects in Python
2017-12-09 [Python] Check for None (Null) in Python
2017-12-09 [Python] Manage Dependencies with Python Virtual Environments