[Javascript] Broadcaster + Operator + Listener pattern -- 11. Customize the done logic

Buffers give you chance to gather values together until your ready to work with them. This pattern can be used for calculations, string manipulations, and many other scenarios.

Consider a solution where splitter argument is a function instead of a value. How could you capture the condition in that function rather than the way it was implemented in this lesson

 

Sometime if "createOpertor"'s done logic is not actully what you want, when you can customize you own done logic:

const split = splitter => curry((broadcaster, listener) => {
  let buffer = []
  return broadcaster((value) => {
    if (value === done) {
      // emit the rest of buffer on done
      listener(buffer)
      listener(done)
      buffer = []
    }
    if (value === splitter) {
      listener(buffer)
      buffer = []
    } else {
      buffer.push(value)
    }
  })
})

 

Usage:

const transform =  pipe(
    map((x) => x[1]),
    filter((x) => x !== ','),
    map(toUpper),
    split(" ")
  );
let typeGreeting = transform(
  createZipOf(createInterval(100), createForOf('My Zipo'))
);
const cancelGreating = typeGreeting((value => {
  if(value === done) {
    _log("Shut down")
    return
  }
  _log(value)
}))

 

posted @ 2020-10-25 22:10  Zhentiw  阅读(97)  评论(0编辑  收藏  举报