继上一篇的DAY8: process.nextTick(),今天要介绍新方法并相互比较。
setImmediate()
是Node的提出的,并不属於ECMAScript的标准。
setImmediate()
与process.nextTick()
相同点是都是将回调函数加入到伫列(immediateQueue)中,
但不同的点是setImmediate()
会在事件循环的结尾触发,会在poll阶段结束後执行。
透过文字叙述的比较好像有点饶舌了,下面直接看setImmediate()
与process.nextTick()
执行的先後顺序。
实际例子:
//setImmediate与nextTick
setImmediate(()=>
{
console.log("setImmediate !!");
});
process.nextTick(()=>
{
console.log("nextTick");
});
执行结果:
由结果可知,process.nextTick()
会在setImmediate()
前先执行,
不管这两个的输入指令顺序前後,永远都是这个定律。
那麽在加入前一篇所说的内容,比较log、nextTick、setImmediate三者的顺序。
//setImmediate与nextTick与log
setImmediate(()=>
{
console.log("setImmediate !!");
});
process.nextTick(()=>
{
console.log("nextTick");
});
console.log("BY Nicole !!");
执行结果:
前一篇DAY8: process.nextTick()的结尾有提出当有递回出现的时候不能使用nextTick,那麽在这里使用可以吗?
例子:
设立一个递回,从1开始加2,上限是10。
//setImmediate出现递回
function Nicole(x,y)
{
if(x>y)
{
console.log('Finish!!!!!');
}
else
{
console.log(x);
setImmediate(Nicole,x+2,y);
}
}
Nicole(1,10);
执行结果:
喔耶!!! 是可以被执行!因为setImmediate()
不会产生呼叫堆叠(call stack)。
总结:
setImmediate的中文翻译是立即设置,但是它执行的行为与命名的意思背道而驰…,
反而是nextTick比它还快速…,所以千万不要被表面意思所骗了,
在有使用递回的操作上也需要特别注意,不是使用比较快的那个就比较好!!!!
>>: Day 9 Swift语法-进阶篇(2/5)-Inheritance
储存领域有个重要的定理 - CAP定理,C(Consistency一致性)A(Availabilit...
今天要介绍 TypeScript 的基本型别,TypeScript 跟 JavaScript 一样拥...
之前有提到单选题与下拉式选单都可以设定「依选项前往区段」 在这里我们利用「座号」前往区段 连结「座号...
请问有没有剪辑软件自带文字转语音(GOOGLE小姐或SIRI小姐)配音功能?不用另外录制。 ...
进度来到第三天,终於要打开 tableau public 并实际操作看看了,大家是不是也很期待呢? ...