Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.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 设置超时以实现节点中的异步性_Javascript_Node.js_Asynchronous - Fatal编程技术网

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是单线程的,不能同时运行两个任务(您对非阻塞的理解),除非我们为同一个任务生成了工作线程。这可能有助于: