[Javascript] Broadcaster + Operator + Listener pattern -- 23. ifElse operator

So far, we've used filter to prevent values when a condition is met. Sometimes you want two different behaviors based on a condition which is where you would naturally reach for an if and an else. Let's take a look at what an ifElse operator would look like in the context of our live search box.

 

Logic:

复制代码
let App = () => {
  let onInput = useListener()
  let inputValue = targetValue(onInput)

  let inputToBooks = pipe(
    waitFor(150),
    ifElse(
      // condition
      name => name.length > 3,
      // if
      pipe(
        map(name => `https://openlibrary.org/search.json?q=${name}`),
        mapBroadcaster(getUrl),
        map(json => json.docs)
      ),
      // else
      map(() => [])
  ))(inputValue)
  let books = useBroadcaster(inputToBooks, [])
复制代码

 

ifElse:

复制代码
export let ifElse = (condition, ifOp, elOp) => broadcaster => listener => {
  let cancel = broadcaster(value => {

    if (value === done) {
      return;
    }

    if (condition(value)) {
      ifOp(innerValue => innerValue(value))(listener)
    } else {
      elOp(innerValue => innerValue(value))(listener)
    }
  })

  return () => {
    cancel()
  }
}
复制代码

 

posted @   Zhentiw  阅读(147)  评论(0编辑  收藏  举报
编辑推荐:
· 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-06 [Algorithm] 206. Reverse Linked List
2018-12-06 [Cypress] install, configure, and script Cypress for JavaScript web applications -- part3
2016-12-06 [Angular2] Map keyboards events to Function
2016-12-06 [Vue] Create Vue.js Layout and Navigation with Nuxt.js
2016-12-06 [Now] Deploy a Node project with Zeit’s Now
2016-12-06 [React] Create & Deploy a Universal React App using Zeit Next
2016-12-06 [Vue] Build Vue.js Apps with the Vue-CLI and Nuxt.js
点击右上角即可分享
微信分享提示