zl程序教程

您现在的位置是:首页 >  前端

当前栏目

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

JavaScript -- The 11 pattern Operator listener Logic
2023-09-14 09:00:46 时间

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)
}))