zoukankan      html  css  js  c++  java
  • [Javascript] Broadcaster + Operator + Listener pattern -- 6. Create a Buffer to Pair Values Together with Zip

    Functions returning functions returning functions can begin to look a bit unwieldy. The arrow function has helped the syntax a lot, but maybe using a curry utility function to combine all the arguments into a single function will help your syntax look a little cleaner. Currying isn't necessary for our pattern, but you'll definitely see it used in many patterns involving functions returning functions and maybe you'll grow to love it.

    export let createInterval = curry((time, listener) => {
      let i = 0
      let id = setInterval(() => {
          listener(i++)
      }, time)
      return () => {
          clearInterval(id)
      }
    })
    
    export let addListener = curry((selector, eventType, listener) => {
      let element = document.querySelector(selector)
      element.addEventListener(eventType, listener)
    
      return () => {
          element.removeEventListener(eventType, listener)
      }
    })
    
    let zip = curry((broadcaster1, broadcaster2, listener) => {
      let buffer1 = []
      let cancel1 = broadcaster1(value => {
        buffer1.push(value)
        if (buffer2.length) {
    
          listener([buffer1.shift(), buffer2.shift()])
        }
      })
    
      let buffer2 = []
      let cancel2 = broadcaster2(value => {
        buffer2.push(value)
    
        if (buffer1.length) {
    
          listener([buffer1.shift(), buffer2.shift()])
        }
      })
    
      return () => {
        cancel1()
        cancel2()
      }
    })
    
    let clickAndTick = zip(
      addListener("#button", "click"),
      createInterval(1000)
    )
    
    let cancelClickAndTick = clickAndTick(value => {
      console.log(value)
    })
  • 相关阅读:
    银行家算法实例(转)
    DNS中的七大资源记录介绍!(转)
    android之存储篇_SQLite数据库_让你彻底学会SQLite的使用(转)
    回顾HTML5的语义化元素
    vueJs2.0学习笔记(六)
    vueJs2.0学习笔记(五)
    vueJs的学习笔记(四)
    vueJs2.0学习笔记(三)
    vueJs的学习笔记(二)
    vueJs 2.0学习笔记(一)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13869712.html
Copyright © 2011-2022 走看看