
观察者模式
发布日期:2021-05-07 06:43:29
浏览次数:22
分类:技术文章
本文共 1257 字,大约阅读时间需要 4 分钟。
//观察者模式实现异步function create(fn){ let ret = false return ({ next, complete, error })=>{ function nextFn(...args){ if(ret){ return } next(...args) } function completeFn(...args){ complete(...args) ret = true } function errorFn(...args){ error(...args) } fn({ next: nextFn, complete: completeFn, error: errorFn }) return ()=>(ret = true) }}/** *观察者 * observerable 等于({ next, complete, error })=>{ * function nextFn ... * function complete ... * function errorFn ... * (observer=>{ * setTimeout(()=>{ observer.next(1) }, 1000) * observer.next(2) * observer.complete(3) * })() 执行 * return ()=>( ret = true ) * } * */let observerable = create(observer => { setTimeout(()=>{ observer.next(1) }, 1000) observer.next(2) observer.complete(3)})/** * 被观察者 */const subject = { next: value=>{ console.log(value) }, complete: console.log, error: console.log}let unsubscribe = observerable(subject)
结果:
2 3 之所以这样是因为complete调用之后把ret设置为true所以在1秒后调用的next方法不能执行发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月13日 01时46分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
大型面试现场:一条update sql执行都经历什么?
2019-03-06
自导自演的面试现场之--你竟然不了解MySQL的组提交?
2019-03-06
源码分析:Phaser 之更灵活的同步屏障
2019-03-06
实战:MyBatis批量操作-xml方式
2019-03-06
nginx,作为前端的你会多少?
2019-03-06
关于获得当前的index的方法
2019-03-06
ajax 处理请求回来的数据
2019-03-06
简单单页面路由跳转demo
2019-03-06
mongodb 的基本函数语法封装
2019-03-06
vue 不常见操作
2019-03-06