首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入学习 Node.js EventEmitter

此种模式通常被用来实时事件处理系统。...一些系统支持两者的混合:发布者发布消息主题上,而订阅者将基于内容的订阅注册一个或多个主题上。基于主题的通信基础结构图如下: ? 最后我们再来总结一下观察者模式与发布/订阅模式之间的区别。...例如,net.Server 对象会在每次有新连接时触发事件;fs.ReadStream 会在文件被打开时触发事件;流对象 会在数据可读时触发事件。...当 EventEmitter 对象触发一个事件时,所有绑定在该事件上的函数都被同步地调用。 监听器的返回会被丢弃。...在函数体中,若发现事件处理器未被调用,则先移除事件监听器并设置 fired 字段为 true,然后利用之前介绍的 Reflect.apply() 方法调用 type 事件类型,对应的事件处理器。

1K30

LiveData详细分析

实时数据刷新 当组件处于活跃状态或者从不活跃状态活跃状态时总是能收到最新的数据 解决Configuration Change问题 在屏幕发生旋转或者被回收再次启动,立刻就能收到最新的数据。...这部分详细的信息可以参考继承LiveData 2.2 细节点补充 组件和数据相关的内容能实时更新,组件在前台的时候能够实时收到数据改变的通知,当组件从后台前台来时,LiveData能够将最新的数据通知组件...如何去更新那个文本中的数据呢?代码如下所示: 想要在UI Controller中改变LiveData中的呢?(比如点击某个Button设置文本内容的更改)。...调用setValue()方法就可以把LiveData中的改为 "小杨真的是一个逗比么" 。同样,通过这种方法修改LiveData中的同样会触发所有对这个数据感兴趣的类。..., 如有新的数据变更, 则不会再次通知观察者

2.9K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    前端常见手写面试题

    所以这里([^;]*)表示的是除了";"这个字符串别的都匹配(*应该都知道什么意思吧,匹配0次或多次)有的大佬等号后面是这样写的'=([^;]*)(;|$)',而最后为什么可以把'(;|$)'给省略呢?...:1, b:3}, {a:3}] arr.reduce((prev, cur) => { return prev + cur["a"];}, 0)实现防抖函数(debounce)防抖函数原理:把触发非常频繁的事件合并成一次去执行...在指定时间内执行一次回调函数,如果在指定的时间内又触发了该事件,则回调函数的执行时间会基于此刻重新开始计算图片防抖动和节流本质是不一样的。...防抖动是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行eg....:防止多次提交按钮,执行最后提交的一次服务端验证场景:表单验证需要服务端配合,执行一段连续的输入事件的最后一次,还有搜索联想词功能类似Object.assignObject.assign()方法用于将所有可枚举属性的从一个或多个源对象复制目标对象

    34920

    百度前端二面常考手写面试题总结

    图片像dom的拖拽,如果用消抖的话,就会出现卡顿的感觉,因为在停止的时候执行了一次,这个时候就应该用节流,在一定时间内多次执行,会流畅很多手写简版使用时间戳的节流函数会在第一次触发事件时立即执行,以后每过...wait 秒之后才执行一次,并且最后一次触发事件不会被执行时间戳方式:// func是用户传入需要防抖的函数// wait是等待时间const throttle = (func, wait = 50)...,而是在 delay 秒之后才执行,当最后一次停止触发后,还会再执行一次函数function throttle(func, delay){ var timer = null; returnfunction...:固定时间内执行一次,防止超高频次触发位置变动缩放场景:监控浏览器resize动画场景:避免短时间内多次触发动画引起性能问题总结函数防抖 :将几次操作合并为一次操作进行。...原理是维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置。这样一来,只有最后一次操作能被触发。函数节流 :使得一定时间内触发一次函数。

    53390

    iOS - 关于 KVO 的一些总结

    观察旧 NSKeyValueObservingOptionInitial:观察初始,如果想在注册观察者后,立即接收一次回调,可以加入该枚举 NSKeyValueObservingOptionPrior...:分别在改变前后触发方法(即一次修改有两次触发) ** context: 可以传入任意数据(任意类型的对象或者C指针),在监听方法中可以接收到这个数据,是KVO中的一种传方式...第一次触发的KVO中change字典的old键的为替换前的元素,第二次触发的KVO中change字典的new键的为替换后的元素,前提条件是注册方法中的options传入对应的枚举。...如果实现替换方法,则执行替换操作只会触发一次KVO,并且change字典会同时包含new和old,前提条件是注册方法中的options传入对应的枚举。...你必须在把 child 添加或删除 parent 时把 parent 作为 child 的观察者添加或删除。

    2.5K21

    美团前端二面必会手写面试题汇总

    图片像dom的拖拽,如果用消抖的话,就会出现卡顿的感觉,因为在停止的时候执行了一次,这个时候就应该用节流,在一定时间内多次执行,会流畅很多手写简版使用时间戳的节流函数会在第一次触发事件时立即执行,以后每过...:固定时间内执行一次,防止超高频次触发位置变动缩放场景:监控浏览器resize动画场景:避免短时间内多次触发动画引起性能问题总结函数防抖 :将几次操作合并为一次操作进行。...原理是维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置。这样一来,只有最后一次操作能被触发。函数节流 :使得一定时间内触发一次函数。...resize事件时进行防抖触发一次。...,如果在同一个单位时间内某事件被触发多次,只有一次能生效。

    32400

    前端高频手写面试题

    图片像dom的拖拽,如果用消抖的话,就会出现卡顿的感觉,因为在停止的时候执行了一次,这个时候就应该用节流,在一定时间内多次执行,会流畅很多手写简版使用时间戳的节流函数会在第一次触发事件时立即执行,以后每过...wait 秒之后才执行一次,并且最后一次触发事件不会被执行时间戳方式:// func是用户传入需要防抖的函数// wait是等待时间const throttle = (func, wait = 50)...,而是在 delay 秒之后才执行,当最后一次停止触发后,还会再执行一次函数function throttle(func, delay){ var timer = null; returnfunction...:固定时间内执行一次,防止超高频次触发位置变动缩放场景:监控浏览器resize动画场景:避免短时间内多次触发动画引起性能问题总结函数防抖 :将几次操作合并为一次操作进行。...原理是维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置。这样一来,只有最后一次操作能被触发。函数节流 :使得一定时间内触发一次函数。

    1.1K20

    引入Jetpack架构后,你的App会发生哪些变化?

    LiveData并不是运用观察者模式 观察者模式的优点有哪些? 观察者是一种常见并且非常实用的一种行为型模式,具有扩展性强、耦合性低的特性。...LiveData符合标准的观察者模式,所以它具备扩展性强、耦合性低的特性,同样它还是一个存储数据的容器,当容器数据改变时会触发观察者,即数据驱动。...observe(this, Observer { value-> textView.text = value }) //这一步会改变liveData并且会触发textView...liveData,等回到ActivityA时 你肯定不希望Observer收到多次通知而引发textView多次重绘。...想要使两个Fragment中播放信息实时同步,最优雅的方式是将播放状态托管在Activity作用域下ViewModel的LiveData中,然后各自做状态监听,这样只有要有一方改变就能立即通知另一方,

    1K31

    30道高频JS手撕面试题

    手动实现防抖函数 实现函数的防抖(目的是频繁触发执行一次) 以最后一次触发为标准 /** * 实现函数的防抖(目的是频繁触发执行一次) * @param {*} func 需要执行的函数...func.call(this, ...params) }, wait) } } 以第一次触发为标准 /** * 实现函数的防抖(目的是频繁触发执行一次) * @param {*}...) 带注释说明版 【第一次触发:reamining是负数,previous被赋值为当前时间】 【第二次触发:假设时间间隔是500ms,第一次执行完之后,20ms之后,立即触发第二次,则remaining...timer){ // 两次间隔的事件没有超过频率,说明还没有达到触发标准,设置定时器等待即可(还差多久等多久) // 假设事件间隔为500ms,第一次执行完之后,...callback名称 插入html文本中 调用回调函数,res参数就是获取的数据 let script = document.createElement('script'); script.src

    2.3K30

    小程序数据埋点实践之曝光量

    即相交比例为 0 时触发一次回调,下面我们来设置阈值,看看会有什么改变: // 创建实例 let ob = this.createIntersectionObserver({ thresholds...从图上可以看到,元素在相交比例为 0 、 0.5 、 1 都各自触发一次回调。在统计曝光量设置阈值非常有用,通常我会设置为 1 ,表示元素要完全展示在页面上才会进行记录,这样数据会更加真实准确。...组件改造: 定义 isObserver 属性,该属性由外部传入的布尔控制是否收集曝光量 监听传入的 list ,为每个元素绑定交叉观察者 以下部分代码省略,展示主要逻辑: <block wx:for...那么问题来了,难道文章曝光一次就发起一次请求吗?如果不怕和后端同事干架的话,你可以这么做。要知道多次发起请求,服务器?会很大。用户量比较大后,对服务器能够承受的并发量会有很大的考验。...假如用户看了 40 个就退出小程序,而上报条件是达到 50 个才会发送数据,那么这部分有用的数据就会被丢失。

    2.8K20

    一次React的渲染死循环

    因此不难看出,如上代码段中,当 ViewItem 组件初次渲染 DOM 中之后,会分别顺序触发 useEffect1 和 useEffect2。...所以,setState 可以看错是一个通知事件 当调用 setValueObj 的时候,valueObj 的的变更是不会立即生效的,而是会产生一次通知(类似于监听-观察者模式) 通过调用 setState...先执行 useEffect1,会触发 setValueObj,此操作会产生一个 state 更新事件,产生一次计划 UI 更新(注意:此时并不会立即修改valueObj的)。...至此,我们 React更新队列中就有了两个更新计划,前面 useState 分析中有说明,React 会将多次 setState 合并为同一次。 因此接下来会执行合并之后 state 的UI渲染。...让组件安心做渲染的事情,当 value 的发生变化的时候,直接调用 onChange 将数据传出去,在外部统一处理。

    1.4K20

    JS_手写实现

    debounce(防抖):一个连续操作中的处理,「触发一次」,从而实现防抖动。 throttle(节流):一个连续操作中的处理,「按照阀值时间间隔进行触发」,从而实现节流。...reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回。...一个 reducer 函数,包含四个参数: previousValue:上一次调用 reducer 时的返回。...resolve/reject,从成功/失败队列中「取出回调依次执行」 其实熟悉设计模式,很容易就能意识这是个「观察者模式」,这种 收集依赖 触发通知 取出依赖执行 的方式,被广泛运用于观察者模式的实现..." // 如果使用一个变量而非队列来储存回调,那么即使多次p1.then()也只会执行一次回调 while(this.

    1.3K20

    Interection Observer如何观察变化

    threshold是用于确定何时触发交集改变事件的。数组中可以包含多个,以便同一目标可以多次触发交集改变事件。...在观察者包含多个目标的情况下,这是确定哪个目标元素触发了此相交更改的简便方法。 time属性提供从首次创建观察者触发此交集改变的时间(以毫秒为单位)。...除了每次观察交集改变时我们可以获得这些信息外,观察者一次启动时也会向我们提供这些信息。例如,在页面加载时,页面上的观察者将立即调用回调函数,并提供它正在观察的每个目标元素的当前状态。...我发现我一开始不太了解这个的实际含义。由于某种原因,我认为这是目标元素外观的一种简单的0%100%的表示形式。它与创建时传递给观察者的阈值相关。例如,它可用于确定哪个阈值是刚刚触发相交更改的原因。...它应该是第一次加载的,但是我们很快就会发现该比率并不总是精确的;该数字可能在0.991之间。这似乎很奇怪,但是有可能发生,因此,如果你对等于特定的比率进行检查,请记住这一点。

    2.6K20

    引入Jetpack架构后,你的App会发生哪些变化?

    其实不光videoPlayer,任何需要依赖Activity生命周期的组件 只需实现ObserverLifecycle接口最后注册Activity的observers即可实现生命周期自动化管理,进而可以规避误操作带来的风险...LiveData并不是运用观察者模式 2.1 观察者模式的优点有哪些? 观察者是一种常见并且非常实用的一种行为型模式,具有扩展性强、耦合性低的特性。...LiveData符合标准的观察者模式,所以它具备扩展性强、耦合性低的特性,同样它还是一个存储数据的容器,当容器数据改变时会触发观察者,即数据驱动。...observe(this, Observer { value-> textView.text = value }) //这一步会改变liveData并且会触发textView...liveData,等回到ActivityA时 你肯定不希望Observer收到多次通知而引发textView多次重绘。

    1.9K80

    引入Jetpack架构后,你的App会发生哪些变化?

    LiveData并不是运用观察者模式 2.1 观察者模式的优点有哪些? 2.2 LiveData基于观察者模式又做了哪些扩展?...LiveData并不是运用观察者模式 2.1 观察者模式的优点有哪些? 观察者是一种常见并且非常实用的一种行为型模式,具有扩展性强、耦合性低的特性。...LiveData符合标准的观察者模式,所以它具备扩展性强、耦合性低的特性,同样它还是一个存储数据的容器,当容器数据改变时会触发观察者,即数据驱动。...observe(this, Observer { value-> textView.text = value }) //这一步会改变liveData并且会触发textView...liveData,等回到ActivityA时 你肯定不希望Observer收到多次通知而引发textView多次重绘。

    83700

    编码篇-KVO的使用大全

    KVO是“观察者”设计模式的一种应用,利用它可以很容易实现视图组件和数据模型的分离,当数据模型的属性改变之后作为监听器的视图组件就会被激发,激发时就会回调监听器自身。...,你可以根据整个来判断到底是哪个的变化触发了该方法 关于context 关于 context 参数,其作用可用来标识观察者的身份,在多个观察者观察同一键值时, 尤其在处理父类和子类都观察同一键值时非常有用...属性依赖 设置类的A属性依赖于B、C属性时,对类的A属性进行观察,当B、C属性发生改变时,也会触发对A的观察者方法。...会发现,上述的设置只是设置了返回的数值是改变前的还是改变后的,但是如果一直设置相同的,不断重复,还是会不断的触发通知。...这种方式是通过修改全局变量 age,再把age赋值给 _age,最后达到修改属性的效果。

    61420
    领券