Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS Native NextEventLoop_Javascript_Ecmascript 6_Ecma - Fatal编程技术网

Javascript JS Native NextEventLoop

Javascript JS Native NextEventLoop,javascript,ecmascript-6,ecma,Javascript,Ecmascript 6,Ecma,考虑到异步编程在Javascript中早已司空见惯,对window.setTimeout的调用次数在我看来似乎非常骇人。我了解VM如何工作以及事件循环如何工作。问题是,有人知道为什么ecma作者不选择添加某种“nextEventLoop”或“defer”调用来强制稍后执行逻辑块的原因吗 我每次看到setTimeout(0)都会畏缩不前,因为从来没有一位作者打算将超时设置为零。那么,为什么还要继续强迫我们进行黑客攻击呢 或者,有更好的替代方案吗?从ES6开始,Promise.resolve()。然

考虑到异步编程在Javascript中早已司空见惯,对window.setTimeout的调用次数在我看来似乎非常骇人。我了解VM如何工作以及事件循环如何工作。问题是,有人知道为什么ecma作者不选择添加某种“nextEventLoop”或“defer”调用来强制稍后执行逻辑块的原因吗

我每次看到setTimeout(0)都会畏缩不前,因为从来没有一位作者打算将超时设置为零。那么,为什么还要继续强迫我们进行黑客攻击呢


或者,有更好的替代方案吗?

从ES6开始,
Promise.resolve()。然后(()=>{…})
会满足您的要求,并且对于大多数仍然只是ES5的环境,Promise polyfills是可用的。大多数polyfills甚至避免设置超时,尽可能选择更快更好的选项。

是的,但这正是我要说的。对我来说,这和setTimeout没有什么不同,而且更详细。实际上,这使用了一种不明确用于延迟操作的语言工具,它使用了异步语义的副作用来实现“嘿,JS,将此操作延迟到当前队列之后”的目标。这有意义吗?我很感激你的回答,但可以说这只是另一种剥猫皮的方式。我想这取决于你的观点
setTimeout
甚至不是ES规范的一部分,它是HTML的一部分,并复制到节点中
Promise
是唯一一种用户可见的特定方式,用于在事件循环的后续循环中排队。