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