首页 / JAVASCRIPT / [Javascript] Broadcaster + Operator + Listener pattern -- 18. Create a Win Condition with a mapDone
[Javascript] Broadcaster + Operator + Listener pattern -- 18. Create a Win Condition with a mapDone
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[Javascript] Broadcaster + Operator + Listener pattern -- 18. Create a Win Condition with a mapDone,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2799字,纯文字阅读大概需要4分钟。
内容图文
![[Javascript] Broadcaster + Operator + Listener pattern -- 18. Create a Win Condition with a mapDone](/upload/InfoBanner/zyjiaocheng/622/506fdfc1f6b24a0884930335af13d27e.jpg)
Many streams of events end when a certain condition is met. When we run into that condition, we'll want to pass down our own custom values. This lessons walks through adding a done condition to hangman and how we can use new operators to control what happens when it's done.
Continue with previous post.
1. Set a win logic:
let hangman = pipe(map(hangmanLogic), applyOperator(word), stringConcat); hangman(inputValue)(log); // to let hangman = pipe(map(hangmanLogic), applyOperator(word), stringConcat); let play = hangman(inputValue); let winPipe = pipe(filter((str) => !str.includes("*"))); let win = winPipe(play); play(console.log); win(() => { console.log("you win"); });
When we enter 'honeycomb' in the input, it will log out 'you win', but as you continue typing, 'you win' continue pop up:
/* honeycomb you win honeycombb you win honeycombbbb you win */
2. doneCondition operator:
let hangman = pipe(map(hangmanLogic), applyOperator(word), stringConcat); let doneCondition = (condition) => (broadcaster) => (listener) => { let cancel = filter(condition)(broadcaster)((value) => { listener(done); cancel(); }); return () => { cancel(); }; }; let winPipe = pipe(doneCondition((str) => !str.includes("*"))); let play = hangman(inputValue); let win = winPipe(play); play(console.log); win(() => { console.log("you win"); });
Now, 'you win' only log out once.
3. Pass 'you win' from a operator:
let hangman = pipe(map(hangmanLogic), applyOperator(word), stringConcat); let doneCondition = (condition) => (broadcaster) => (listener) => { let cancel = filter(condition)(broadcaster)((value) => { listener(done); cancel(); }); return () => { cancel(); }; }; let mapDone = (doneValue) => (broadcaster) => (listener) => { broadcaster((value) => { if (value === done) { listener(doneValue); } }); }; let winPipe = pipe( doneCondition((str) => !str.includes("*")), mapDone("you win!") ); let play = hangman(inputValue); let win = winPipe(play); play(console.log); win(console.log);
4. Cancel 'play' when 'win':
let hangman = pipe(map(hangmanLogic), applyOperator(word), stringConcat); let doneCondition = (condition) => (broadcaster) => (listener) => { let cancel = filter(condition)(broadcaster)((value) => { listener(done); cancel(); }); return () => { cancel(); }; }; let mapDone = (doneValue) => (broadcaster) => (listener) => { broadcaster((value) => { if (value === done) { listener(doneValue); } }); }; let cancelWhen = (cancelBroadcaster) => (broadcaster) => (listener) => { let cancel = broadcaster(listener); let cancel2 = cancelBroadcaster(() => { cancel(); }); return () => { cancel(); cancel2(); }; }; let winPipe = pipe( doneCondition((str) => !str.includes("*")), mapDone("you win!") ); let play = hangman(inputValue); let win = winPipe(play); let rules = pipe(cancelWhen(win)); let playWithWin = rules(play); playWithWin(console.log); win(console.log);
内容总结
以上是互联网集市为您收集整理的[Javascript] Broadcaster + Operator + Listener pattern -- 18. Create a Win Condition with a mapDone全部内容,希望文章能够帮你解决[Javascript] Broadcaster + Operator + Listener pattern -- 18. Create a Win Condition with a mapDone所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。