节点j中的回调函数是否以同步方式执行?

时间:2015-06-24 14:37:14

标签: javascript node.js callback

我正在使用websocket libarary创建一些套接字来将数据传递到我的application.some,在我的代码中我写了下面一行。

 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 
}


 }

2 个答案:

答案 0 :(得分: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');

回调将在控制台首次登录'。

后的某个时间调用

您必须阅读该功能的文档才能知道哪个是。

答案 1 :(得分:1)

取决于您正在调用的函数。你需要阅读文档,看看asynchrounos是什么功能,什么不是。

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

已经说过,通常“常规”的JS动作,如遍历数组,设置变量某些值等,都不会异步调用。

关于node.js特定的api - 阅读文档。