2015-06-24 41 views
0

我正在使用websocket libarary来创建一些套接字来将数据传递给我的application.some,在我的代码中我写了下面一行。节点js中的回调函数是以同步方式执行的吗?

connection.on('message', function(message) 
    { 
    SetOfInstruction1; 
    SetOfInstruction2; 
    }); 

我的疑问是:SetOfInstruction1和SetOfInstruction2;按顺序执行或以异步方式执行(这意味着setOfInstruction2可以在setOfInstruction1之前执行)。

下面是示例SetOfInstruction1和SetOfInstruction2的:

例SetOfInstruction1

for (i 1 to n) 
{ 
    find something1 in something2 array 
    if something1 found then set found boolean to true else false; 
} 

示例SetOfInstruction2是

for (i:1 to n) 
{ 
    if found =true; and someOtherConditions matches 
    send message back with true response 
    else{ 
    //continue 
} 


} 

回答

1

它是由要调用的功能。你需要阅读文档,看看哪些功能是异步的,哪些不是。

例如fs.readdir将以异步方式调用,但fs.readdirSync不会。

已经有人说过,通常“常规”的JS动作就像遍历数组,设置变量的某个值等不会被异步调用。

about node.js specific api's - read the docs。

+0

嘿大卫,你有没有找到一个链接,哪里有正确的同步功能和异步功能列表? – user3522412

+0

官方node.js文档在这里:https://nodejs.org/api/,如果文档没有指定,在堆栈溢出中加上问题。 –

+0

thanx大卫,它的ver帮助 – user3522412

2
SetOfInstruction1; 
SetOfInstruction2; 

这些指示将始终按此顺序执行。 Javascript不会随意混淆各行的执行顺序。现在...

someFunc(function() { console.log('first'); }); 
someFunk(function() { console.log('second'); }); 

这里是完全不可预知的,它将首先被记录。这取决于someFunc和/或someFunk是异步还是同步的,并且它们是异步的,哪一个会先完成。再一次,我们可以绝对断言someFunc将在someFunk之前被调用,但是回调的执行顺序取决于这些函数的内部。

有哪些需要回调,这样的同步功能:

arr.sort(function (a, b) { return a - b; }); 
console.log(arr); 

这里执行顺序是你所看到的。控制台将记录排序的数组。但也有其需要回调异步函数:

setTimeout(function() { console.log('second'); }); 
console.log('first'); 

回调将被称为之后的某个时候控制台登录“第一”。

你必须阅读函数的文档,以知道哪个是哪个。

+0

thanx @deceze,我的setOfInstructions1只是一些forloops和在forloops,我只是找到一些并相应地分配一个布尔值(说X),然后在下一次setOfInstructions再次一些forloops在那根据先前的forloop布尔值X我正在执行一些任务。他们是否按顺序执行? – user3522412

+0

正如我所说:是的。 – deceze

+0

thanx @deceze它是非常帮助 – user3522412