Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Node.js 为什么这个示例代码使用process.nextTick?_Node.js_Express - Fatal编程技术网

Node.js 为什么这个示例代码使用process.nextTick?

Node.js 为什么这个示例代码使用process.nextTick?,node.js,express,Node.js,Express,我遇到了这个express.js路由,它是一个示例的一部分,演示了如何处理错误,看看: app.get('/next',函数(req,res,next){ process.nextTick(函数(){ 下一个(新错误('oh no!')); }); });您需要了解节点不是真正异步的事实。每次通过事件循环都将运行到完成。当然,您可以安排一些事情(包括回调、承诺或事件),以便每次运行到完成都非常短,不会阻塞任何位置,但在运行期间,其他任何操作都不会阻塞。这与真正的多进程/多任务操作系统(如lin

我遇到了这个express.js路由,它是一个示例的一部分,演示了如何处理错误,看看:

app.get('/next',函数(req,res,next){
process.nextTick(函数(){
下一个(新错误('oh no!'));
});

});您需要了解节点不是真正异步的事实。每次通过事件循环都将运行到完成。当然,您可以安排一些事情(包括回调、承诺或事件),以便每次运行到完成都非常短,不会阻塞任何位置,但在运行期间,其他任何操作都不会阻塞。这与真正的多进程/多任务操作系统(如linux)不同,在linux中,线程可能随时中断

真正的多任务处理是很难的,因为无论你做什么,你都要迎合这样一个事实,即事情随时都可能被打断,而as节点使它变得更容易,因为你可以确保你当前的线程能够完成它


因此,如果您想确保稍后运行某些程序,或者——我认为这个示例显示了这一点——您不需要立即运行该程序,最好让路,让系统的其他部分发言,然后调用process.nextTick()

根据您向我们展示的代码,没有理由在该代码示例中使用
process.nextTick()

代码可以直接调用
next(新错误('oh no!'))
如下:

app.get('/next', function(req, res, next) {
    next(new Error('oh no!'));
});
process.nextTick()。但是,在您展示的示例中,事件处理程序中没有其他代码,因此没有其他可运行的代码-因此这里没有实际理由使用
进程.nextTick()

我能猜到的最好的情况是,他们只是展示了一个代码示例,说明了如果需要,将来某个时候可以异步调用
next()
,而不必同步调用。它们可以很好地使用
fs.readFile()
setTimeout()
,这两种方法都有异步回调,然后从这些回调中调用
next()
——所有这些都是为了证明只要在操作完成时调用
next()