2015-06-24 75 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