Javascript 设置超时以实现节点中的异步性
在节点中执行Javascript 设置超时以实现节点中的异步性,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,在节点中执行setTimeout(fx,0)有什么意义 这不是异步的,甚至不是非阻塞的,因为异步函数实际上是setTimeout,而不是您的fx,并且在setTimeout异步运行后,您最终将运行fx,这将阻塞您的代码 使用0执行setTimeout调用函数fx只需等待堆栈为空即可运行fx,但是当fx运行时,您将无法接受任何请求,对吗 所以,setTimeout(fx,0)只是告诉节点‘嘿,尽可能随时运行这个’的一种方式吗?有没有办法在Node中真正运行异步函数?如果您的问题是: 节点能否同时并
setTimeout(fx,0)
有什么意义
这不是异步的,甚至不是非阻塞的,因为异步函数实际上是setTimeout
,而不是您的fx
,并且在setTimeout
异步运行后,您最终将运行fx
,这将阻塞您的代码
使用0
执行setTimeout
调用函数fx
只需等待堆栈为空即可运行fx
,但是当fx
运行时,您将无法接受任何请求,对吗
所以,setTimeout(fx,0)
只是告诉节点‘嘿,尽可能随时运行这个’的一种方式吗?有没有办法在Node中真正运行异步函数?如果您的问题是:
节点能否同时并行运行功能
那么答案是肯定的,但你必须使用网络工作者
节点中的异步性范例不同于传统的定义。我们希望您不会在节点中运行太多超长时间运行的函数。通过这种方式,可以实现有效的异步
节点对于某些事情是好的,而对于其他事情则不是,就像任何环境一样
有关更详细的答案,请参阅
至于setTimeout(…,0)
调用;有时,可能需要在耗时的任务中暂停,以允许队列中的调用共享处理。以不同的方式划分任务可以避免这些问题;但是,这并不是真正的黑客行为,它只是事件队列的工作方式。此外,使用process.nextTick
实现这一目标要好得多,因为当您使用setTimeout时,需要计算和检查所经过的时间,而process.nextTick
正是我们真正想要的:“嘿,任务,回到队列末尾,您已经使用了您的份额!”
如果你的问题是:
节点能否同时并行运行功能
那么答案是肯定的,但你必须使用网络工作者
节点中的异步性范例不同于传统的定义。我们希望您不会在节点中运行太多超长时间运行的函数。通过这种方式,可以实现有效的异步
节点对于某些事情是好的,而对于其他事情则不是,就像任何环境一样
有关更详细的答案,请参阅
至于setTimeout(…,0)
调用;有时,可能需要在耗时的任务中暂停,以允许队列中的调用共享处理。以不同的方式划分任务可以避免这些问题;但是,这并不是真正的黑客行为,它只是事件队列的工作方式。此外,使用process.nextTick
实现这一目标要好得多,因为当您使用setTimeout时,需要计算和检查所经过的时间,而process.nextTick
正是我们真正想要的:“嘿,任务,回到队列末尾,您已经使用了您的份额!”
如果我正确理解你的问题,答案如下: 由于JavaScript是一种单线程语言,它仍然能够分别处理两件事 使用
setTimeout(fx,0)
可以在“等待QUE”中推送setTimeout函数内的函数或操作。一旦操作堆栈完成,函数就会被放入执行堆栈并执行
有关这方面的更多详细信息,请参见此如果我正确理解您的问题,答案如下: 由于JavaScript是一种单线程语言,它仍然能够分别处理两件事 使用
setTimeout(fx,0)
可以在“等待QUE”中推送setTimeout函数内的函数或操作。一旦操作堆栈完成,函数就会被放入执行堆栈并执行
关于这一点的更多详细信息可以在本中找到,我认为您误解了非阻塞代码的概念。Javascript是单线程的,不能同时运行两个任务(您对非阻塞的理解),除非我们为同一个任务生成了工作线程。这可能会有所帮助:我认为您误解了非阻塞代码的概念。Javascript是单线程的,不能同时运行两个任务(您对非阻塞的理解),除非我们为同一个任务生成了工作线程。这可能有助于: