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