Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 Node.js异步函数,process.nextTick()_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript Node.js异步函数,process.nextTick()

Javascript Node.js异步函数,process.nextTick(),javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在编写一个节点后端,我有点困惑如何处理异步函数。我已经读过process.nextTick(),但我应该多久使用一次。我的大部分代码都基于回调,比如数据库调用,它们本身是异步的。但我也有一些自己的函数,它们应该是异步的 那么,哪一个是异步函数的好例子呢 function validateUser1(user, callback) { process.nextTick(function() { //validate user, some regex and stuff

我正在编写一个节点后端,我有点困惑如何处理异步函数。我已经读过process.nextTick(),但我应该多久使用一次。我的大部分代码都基于回调,比如数据库调用,它们本身是异步的。但我也有一些自己的函数,它们应该是异步的

那么,哪一个是异步函数的好例子呢

function validateUser1(user, callback) {

  process.nextTick(function() {    

     //validate user, some regex and stuff

     callback(err, user);

  });

}

function validateUser2(user, callback) {

  //validate user, some regex and stuff

  process.nextTick(callback, err, user);

}

function validateUser3(user, callback) {

  process.nextTick(function() {    

    //validate user, some regex and stuff

    process.nextTick(callback, err, user);

  });

}
我不知道是应该将所有内容都包装在process.nextTick中,还是只包装回调?或者两者都有

总的来说,node.js的想法是编写大量的小函数,而不是较大的函数,并异步调用它们以不阻止其他事件,对吗?

如果您只有CPU代码(没有I/O),您应该尽可能地执行。避免不必要地分割代码的异步函数和小函数

抓住机会,尽可能编写干净、可读的线性代码。仅在绝对必要时恢复为异步,例如流I/O(文件或网络)

想想这个。即使您有1000多行JS代码,它的执行速度仍然非常快。你真的不需要对它进行分段(除非证明它太麻烦,比如非常深的循环,但是你必须先测量它)

如果不先测试线性代码,并实际看到需要对其进行分段,那么最终会导致过早优化,这对可维护性是一件坏事

我真的会马上说:

function validateUser1(user, callback) {
   //validate user, some regex and stuff
   callback(err, user);
}
如果可能的话,完全删除该函数(但这是如何编写其余代码的问题)

另外,如果你真的不需要它,不要使用
nextTick()
。我已经实现了一个云服务器,它有许多TCP/IP套接字、数据库连接、日志记录、文件读取和大量I/O,但是我没有一次使用
nextTick()
,而且运行非常平稳。

如果你只有CPU代码(没有I/O),你应该尽可能地尝试。避免不必要地分割代码的异步函数和小函数

抓住机会,尽可能编写干净、可读的线性代码。仅在绝对必要时恢复为异步,例如流I/O(文件或网络)

想想这个。即使您有1000多行JS代码,它的执行速度仍然非常快。你真的不需要对它进行分段(除非证明它太麻烦,比如非常深的循环,但是你必须先测量它)

如果不先测试线性代码,并实际看到需要对其进行分段,那么最终会导致过早优化,这对可维护性是一件坏事

我真的会马上说:

function validateUser1(user, callback) {
   //validate user, some regex and stuff
   callback(err, user);
}
如果可能的话,完全删除该函数(但这是如何编写其余代码的问题)

另外,如果你真的不需要它,不要使用
nextTick()
。我已经实现了一个云服务器,它有许多TCP/IP套接字、数据库连接、日志记录、文件读取和大量I/O,但是我没有一次使用
nextTick()
,而且运行非常平稳。

进程。nextTick()将在继续事件循环之前执行回调。如果传递给process.nextTick()的回调像加密、计算PI等那样占用CPU资源,这将阻止线程并阻止处理传入连接

据我所知,您试图通过将函数传递给process.nextTick()使其异步。这不是它的工作原理。 当您将某些内容传递给process.nextTick()时,它将在下次执行eventloop之前执行。这不会使函数成为非阻塞函数,因为您执行的函数仍在主线程中运行。只有I/O操作可以是非阻塞的

因此,如果您使用process.nextTick()包装CPU密集型函数,或者直接执行它们,则与此无关

如果您想阅读更多背景信息,请参阅以下资源:

进程。nextTick()将在继续执行事件循环之前执行回调。如果传递给process.nextTick()的回调像加密、计算PI等那样占用CPU资源,这将阻止线程并阻止处理传入连接

据我所知,您试图通过将函数传递给process.nextTick()使其异步。这不是它的工作原理。 当您将某些内容传递给process.nextTick()时,它将在下次执行eventloop之前执行。这不会使函数成为非阻塞函数,因为您执行的函数仍在主线程中运行。只有I/O操作可以是非阻塞的

因此,如果您使用process.nextTick()包装CPU密集型函数,或者直接执行它们,则与此无关


如果您想阅读更多背景信息,请参阅以下参考资料:

我仍然对提供的答案感到困惑。 我在Lynda.com上看了一个关于NodeJS(高级NodeJS)的短期课程。 guy提供了以下使用process.nextTick()的示例

如果不使用,将首先打印console.log('end')。不是异步的。 我理解为编写异步代码,您需要process.nextTick。
现在还不清楚在没有进程的情况下如何在前端用JS编写异步代码。next Tick()

我仍然对提供的答案感到困惑。 我在Lynda.com上看了一个关于NodeJS(高级NodeJS)的短期课程。 guy提供了以下使用process.nextTick()的示例

如果不使用,将首先打印console.log('end')。不是异步的。 我理解为编写异步代码,您需要process.nextTick。
现在还不清楚在没有进程的情况下如何在前端用JS编写异步代码。next Tick()

“但我也有一些自己的函数,应该是异步的”这是什么意思?如果一个函数本质上是同步的,为什么要使它异步呢?“但我也有一些自己的函数,应该是异步的”这是什么意思?为什么是麦