博客
关于我
观察者模式
阅读量:331 次
发布时间: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/

你可能感兴趣的文章
多媒体文件格式全解说(下)--图片
查看>>
淘宝WAP版小BUG分析
查看>>
Java并发之ThreadPoolExecutor源码解析(三)
查看>>
TCP/IP网络编程之域名及网络地址
查看>>
NodeJS+Express+MongoDB
查看>>
(四十四)c#Winform自定义控件-水波-HZHControls
查看>>
c#winform主题实现的一个方法
查看>>
asp.net打印网页后自动关闭网页【无需插件】
查看>>
一个人开发的html整站源码分享网站就这么上线了
查看>>
SQLServer 查看耗时较多的SQL语句(转)
查看>>
数据结构与算法系列之目录
查看>>
【计算机网络】应用层
查看>>
【Markdown】公式指导手册
查看>>
【Maven】POM基本概念
查看>>
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
查看>>
【设计模式】单例模式
查看>>
【SpringCloud】Hystrix熔断器
查看>>
【SpringCloud】Gateway新一代网关
查看>>
【Linux】2.3 Linux目录结构
查看>>
java.util.Optional学习笔记
查看>>