Javascript JS Native NextEventLoop
考虑到异步编程在Javascript中早已司空见惯,对window.setTimeout的调用次数在我看来似乎非常骇人。我了解VM如何工作以及事件循环如何工作。问题是,有人知道为什么ecma作者不选择添加某种“nextEventLoop”或“defer”调用来强制稍后执行逻辑块的原因吗 我每次看到setTimeout(0)都会畏缩不前,因为从来没有一位作者打算将超时设置为零。那么,为什么还要继续强迫我们进行黑客攻击呢Javascript JS Native NextEventLoop,javascript,ecmascript-6,ecma,Javascript,Ecmascript 6,Ecma,考虑到异步编程在Javascript中早已司空见惯,对window.setTimeout的调用次数在我看来似乎非常骇人。我了解VM如何工作以及事件循环如何工作。问题是,有人知道为什么ecma作者不选择添加某种“nextEventLoop”或“defer”调用来强制稍后执行逻辑块的原因吗 我每次看到setTimeout(0)都会畏缩不前,因为从来没有一位作者打算将超时设置为零。那么,为什么还要继续强迫我们进行黑客攻击呢 或者,有更好的替代方案吗?从ES6开始,Promise.resolve()。然
或者,有更好的替代方案吗?从ES6开始,
Promise.resolve()。然后(()=>{…})
会满足您的要求,并且对于大多数仍然只是ES5的环境,Promise polyfills是可用的。大多数polyfills甚至避免设置超时,尽可能选择更快更好的选项。是的,但这正是我要说的。对我来说,这和setTimeout没有什么不同,而且更详细。实际上,这使用了一种不明确用于延迟操作的语言工具,它使用了异步语义的副作用来实现“嘿,JS,将此操作延迟到当前队列之后”的目标。这有意义吗?我很感激你的回答,但可以说这只是另一种剥猫皮的方式。我想这取决于你的观点setTimeout
甚至不是ES规范的一部分,它是HTML的一部分,并复制到节点中Promise
是唯一一种用户可见的特定方式,用于在事件循环的后续循环中排队。