草庐IT

惰性队列

全部标签

javascript - 惰性求值可以通过 monadic 类型实现吗?

我目前正在研究结合Javascript中的monad的惰性求值,以及可能从中演化出哪些用例。所以我尝试实现一个惰性类型,它实现了functor/monad类型类。相应的构造函数在其参数和结果中是惰性的。这是我想出的://alazytype//(()->a)->()->bconstLazy=thunk=>()=>thunk();//(b->a->b)->b->Lazya->bLazy.fold=f=>acc=>tx=>f(acc)(tx());//(a->b)->Lazya->LazybLazy.map=f=>tx=>Lazy(()=>f(tx()));//Lazy(a->b)->Laz

javascript - Javascript 事件队列是否是一个简单的 FIFO?

看看这个例子:functionA(){console.log('A');}functionB(){console.log('B');}//andthenisetTimeout(fn,0)bothofthemsetTimeout(A,0);setTimeout(B,0);是否保证B会在A之后立即运行?浏览器是否可能在A和B之间的队列中添加另一个任务?注意:A或B函数都没有向事件循环添加任何新任务。varcallbacks=[];//thenaddabunchofcallbacks...(noneaddseventstoeventqueue)//case1:callbacks.forEac

javascript - 使用代理捕获所有链式方法和 getter(用于惰性执行)

上下文:假设我有一个对象,obj,有一些方法和一些getters:varobj={method1:function(a){/*...*/},method2:function(a,b){/*...*/},}Object.defineProperty(obj,"getter1",{get:function(){/*...*/}});Object.defineProperty(obj,"getter2",{get:function(){/*...*/}});obj是可链接的,链接通常包括方法和getter:obj.method2(a,b).getter1.method1(a).getter2

javascript - 使用下划线在javascript中进行惰性范围迭代

我发现自己用它代替了传统的for循环:_.each(_.range(count),function(i){...});缺点是创建了一个不必要的大小数组。不过,我更喜欢语义,例如,.each(.range(10,0,-1),...);向后迭代时。有没有办法像python的xrange那样在范围内进行惰性迭代? 最佳答案 请注意:_.each(_.range(count),function(i){...});相当于_.times(count,function(i){...});小即是美...

JavaScript 函数队列

我有大量功能需要连续运行,但不能在另一个完成之前运行。我需要的是一种将这些函数排入队列以仅在前一个函数成功完成后运行的方法。有什么想法吗?Function1();Function2();Function3();Function4();Function5(); 最佳答案 你可以使用这样的东西:varFunctionQueue=(function(){varqueue=[];varadd=function(fnc){queue.push(fnc);};vargoNext=function(){varfnc=queue.shift();f

数据结构之优先级队列【堆】(Heap)

目录1.优先级队列(PriorityQueue)2.堆的概念3.堆的存储方式4.堆的创建5.用堆模拟实现优先级队列 6.PriorityQueue常用接口介绍6.1 PriorityQueue的特点6.2 PriorityQueue几种常见的构造方式7.top-k问题8.堆排序本篇主要内容总结(1)优先级队列底层是堆来实现的(2)堆的本质是完全二叉树 ,堆有大根堆和小根堆(3)大根堆:根节点最大的堆;小根堆:根节点最小的堆(4)堆的创建实现:大根堆为例大根堆创建:孩子结点和根节点比较交换,核心思想:向下调整  时间复杂度O(n)堆的插入:插入到最后一个位置,和根结点交换,核心思想:向上调整堆的

javascript - 使用 Google Analytics 跟踪出站链接时,为什么要延迟出站点击而不是将函数插入队列?

officialsuggestion使用GoogleAnalytics(的异步版本)跟踪出站链接是将跟踪事件推送到队列中,例如:gaq.push(['_trackEvent','Outbound','http://foo.bar/']);setTimeout('document.location="http://foo.bar"',100);pushananonymousfunctionintotheGAqueue不是更好吗,比如:gaq.push(['_trackEvent','Outbound','http://foo.bar/']);gaq.push(function(){doc

javascript - 将 Observables 实现到持久队列库中

目前正在编写一个小型持久队列库,用于将行读取/写入文本文件。这是添加方法,例如:Queue.prototype.add=function(line,cb){getLock(this,err=>{if(err){this.emit('error',err);releaseLock(err,cb);}else{fs.appendFile(this.filepath,line,err=>{err&&this.emit('error',err);releaseLock(err,cb);});}});};我觉得很尴尬的是支持事件发射器和回调(或事件发射器和promise)。换句话说,对于队列中的

javascript - 牛队列并发问题

我需要帮助了解BullQueue(bull.js)如何处理并发作业。假设我有10个Node.js实例,每个实例都实例化一个连接到同一个Redis实例的BullQueue:constbullQueue=require('bull');constqueue=newbullQueue('taskqueue',{...})constconcurrency=5;queue.process('jobTypeA',concurrency,job=>{...dosomething...});这是否意味着在所有10个Node实例中,将有最多5个(并发)并发运行的类型为jobTypeA的作业?还是我误解了

javascript promises、事件循环和作业队列

考虑以下代码:functionfoo(){console.log('foo');newPromise(function(resolve,reject){setTimeout(function(){resolve('RESOLVING');},5000);}).then(function(value){console.log(value);});}foo();我试图正确理解这里发生的事情:在执行newPromise时,“executerfunction”直接运行,当setTimeout被调用时,安排一个操作将新条目添加到“事件队列”(5秒后)因为调用then一个添加到“作业队列”的操作,