博客
关于我
观察者模式
阅读量:330 次
发布时间:2019-03-04

本文共 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方法不能执行

转载地址:http://zash.baihongyu.com/

你可能感兴趣的文章
(SpringMVC)springMVC.xml 和 web.xml
查看>>
1.2.3 项目、项目集、项目组合以及运营管理之间的关系
查看>>
892 三维形体的表面积(分析)
查看>>
875 爱吃香蕉的珂珂(二分查找)
查看>>
第十一届蓝桥杯python组第二场省赛-数字三角形
查看>>
Dijkstra算法的总结
查看>>
Vue实现选项卡功能
查看>>
vue中接收后台的图片验证码并显示
查看>>
趣谈win10常用快捷键
查看>>
王爽 《汇编语言》 读书笔记 三 寄存器(内存访问)
查看>>
IDEA出现问题:Received fatal alert: protocol_version 解决方案
查看>>
Airtest自动化测试 Docs airtest.core.android package
查看>>
JDK 内置的多线程协作工具类的使用场景
查看>>
Java 中哪些对象可以获取类对象
查看>>
11.2.6 时间值的小数秒
查看>>
Redis源码分析(七)--- zipmap压缩图
查看>>
自定义Hive Sql Job分析工具
查看>>
【MySQL】(九)触发器
查看>>
Oracle 11G环境配置
查看>>
【Python】(十二)IO 文件处理
查看>>