@gaubee/util
包中的 delay 函数,相比于市面上的 delay 函数,有着很特别的能力,就是它不仅仅是可以传递一个数字(毫秒),还可以传递一个 timmer 对象。
以下是详细的能力介绍:
delay(0)
0 毫秒,那么它不会使用 setTimeout 来计时,而是会使用 queueMicrotask 来创建延迟队列。然而你知道 await 关键词本身就是在创建一个 queueMicrotask 队列,不同的是,const delayer = delay(0)
这里的 delayer 对象是可以进行取消的delayer.cancel(reason?)
。delay(10)
等同于 setTimeout/clearTimeoutdelay(timmers.raf)
等同于 requestAnimationFrame/cancelAnimationFramedelay(timmers.eventTarget<AnyEvent>(window,'scrollend'))
等同于 addEventListener/removeEventListener(浏览器 EventTarget)delay(timmers.eventEmitter<AnyArgs>(event,'scrollend'))
等同于 addEventListener/removeEventListener(nodejs 的 EventEmitter)delay(pureEvent<AnyType>().once);
可以将一个 pureEvent 的 once 函数直接传递进去- 你可以可以完全自定义什么时候进行 resolve,并返回解构函数:
delay((resolve, reject) => { some.on(resolve); return () => some.off(resolve); });