Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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 节点JS代码执行_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 节点JS代码执行

Javascript 节点JS代码执行,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,在阅读了许多关于如何在NodeJS中编写正确代码的文章后,我现在有点恼火 我只想澄清一下我对这些陈述是否正确: 代码是同步执行的 for循环或while循环等将异步执行 执行以下代码不是正确的异步: L 人们之所以说这不能正常工作,是因为代码是异步执行的,所以回调不会在代码结束时触发,而是会立即执行 因此,例如,如果您正在通过执行某些操作填充某个对象,并且希望通过回调将该完整对象发回,那么它将不起作用,因为它将同时执行。否,for和,而循环在Node.js中是同步的 您的doSomethin

在阅读了许多关于如何在NodeJS中编写正确代码的文章后,我现在有点恼火

我只想澄清一下我对这些陈述是否正确:

  • 代码是同步执行的
  • for循环或while循环等将异步执行
  • 执行以下代码不是正确的异步:
L

人们之所以说这不能正常工作,是因为代码是异步执行的,所以回调不会在代码结束时触发,而是会立即执行


因此,例如,如果您正在通过执行某些操作填充某个对象,并且希望通过回调将该完整对象发回,那么它将不起作用,因为它将同时执行。

否,
for
,而
循环在Node.js中是同步的


您的
doSomething
函数示例是否有效取决于您在调用
callback()
之前是否调用了异步函数。如果您正在进行异步调用,则需要推迟调用
callback()
,直到这些异步调用完成。如果只进行同步调用,则不需要使用回调,函数可以同步返回结果。

否,
for
,而
循环在Node.js中是同步的


您的
doSomething
函数示例是否有效取决于您在调用
callback()
之前是否调用了异步函数。如果您正在进行异步调用,则需要推迟调用
callback()
,直到这些异步调用完成。如果只进行同步调用,则不需要使用回调,函数可以同步返回结果。

否,
for
,而
循环在Node.js中是同步的


您的
doSomething
函数示例是否有效取决于您在调用
callback()
之前是否调用了异步函数。如果您正在进行异步调用,则需要推迟调用
callback()
,直到这些异步调用完成。如果只进行同步调用,则不需要使用回调,函数可以同步返回结果。

否,
for
,而
循环在Node.js中是同步的


您的
doSomething
函数示例是否有效取决于您在调用
callback()
之前是否调用了异步函数。如果您正在进行异步调用,则需要推迟调用
callback()
,直到这些异步调用完成。如果只进行同步调用,则不需要使用回调,函数可以同步返回结果。

node.js中的代码不是标准的异步。您一个接一个地进行的调用仍将一个接一个地执行。for或while循环仍将以这种方式阻止主代码

但是,您可以通过process.nextTick(回调)传递稍后将执行的函数。此方法将向事件队列添加一个函数,node.js在内部负责该函数。这将仅在任何其他阻止代码被执行后执行。例如:

function doWork(callback) {
    //Do some work here, for instance a for loop that might take a while

    callback(workReslt);
}

function workDone(workResult) {
    //Process the result here
}

function startWork() {
    process.nextTick(doWork(workDone));
}
当服务器再次通过事件循环时,将执行doWork()。这样,startWork()函数就不会阻塞主代码

然而,node.js中的大多数模块已经实现了这一点。数据库和文件访问通常是非阻塞的,当它完成工作时,它将简单地触发回调

如果您确实需要执行大量异步计算(或者某些IO还没有模块),您可以研究异步模块,这里有一个很好的教程:

至于编码约定,请这样想。如果您知道操作需要时间,那么应该使其异步(通过我首先提到的方法或异步模块)。像这样的操作通常与I/O相关,这通常也意味着已经有了一个异步模块。然而,到目前为止,我遇到的大多数情况都不需要这样做

资料来源:
node.js中的代码不是标准的异步代码。您一个接一个地进行的调用仍将一个接一个地执行。for或while循环仍将以这种方式阻止主代码

但是,您可以通过process.nextTick(回调)传递稍后将执行的函数。此方法将向事件队列添加一个函数,node.js在内部负责该函数。这将仅在任何其他阻止代码被执行后执行。例如:

function doWork(callback) {
    //Do some work here, for instance a for loop that might take a while

    callback(workReslt);
}

function workDone(workResult) {
    //Process the result here
}

function startWork() {
    process.nextTick(doWork(workDone));
}
当服务器再次通过事件循环时,将执行doWork()。这样,startWork()函数就不会阻塞主代码

然而,node.js中的大多数模块已经实现了这一点。数据库和文件访问通常是非阻塞的,当它完成工作时,它将简单地触发回调

如果您确实需要执行大量异步计算(或者某些IO还没有模块),您可以研究异步模块,这里有一个很好的教程:

至于编码约定,请这样想。如果您知道操作需要时间,那么应该使其异步(通过我首先提到的方法或异步模块)。像这样的操作通常与I/O相关,这通常也意味着已经有了一个异步模块。然而,到目前为止,我遇到的大多数情况都不需要这样做

资料来源:
node.js中的代码不是标准的异步代码。打电话给你