2012-09-25 32 views

回答

2

有哪些是異步的,其中包括的功能的列表:

process.nextTick(...) 

setTimeout(...) 
setInterval(...) 

File System模塊:

var fs = require('fs'); 
fs.rename(...) 
fs.stat(...) 
fs.readFile(...) 
fs.writeFile(...) 
fs... 

還有更多的fs,基本上是異步的,它們的同步版本在最後有「Sync」後綴(儘管應該避免使用同步版本)。

還有很多更多的例子。EventEmitters可以被認爲是異步的(例如HTTP serversstreams),儘管在技術上它們不是(它們依賴於異步操作)。

它接受callback作爲一個參數是異步的(或依賴於異步操作),例如基本上幾乎所有的東西:

process.nextTick(function() { // <--- the callback 
    console.log('nextTick'); 
}); 
console.log('test'); // <--- will fire before the callback, i.e. asynchronouos 

請記住,這顯然不是一個規則,顯着的例子:

var arr = [ 1, 2, 3 ]; 
arr.forEach(function(el) { // <--- the callback 
    console.log(el); 
}); 
console.log('test'); // <--- will fire after the callback, i.e. synchronous 

所以,同步碼是一條代碼,它可以在行和行順序之後觸發行。異步代碼是相反的:行(幾乎)的順序無關緊要。在process.nextTick的示例中,您可以更改process.nextTickconsole.log('test')的順序,結果將保持不變。

閱讀the documentation並嘗試記憶所有基本的異步功能。

還有一個建議:最好的學習方法是邊做邊學。 ;-)

2

閱讀代碼;)當庫是異步的時候,它通常是非常明顯的,因爲它通常有助於延續或消息傳遞樣式代碼。通常情況下,您可以有目的地撥打電話並查看它的反應。或者更好的:分析你的代碼。

我不知道任何工具,它可以回答真或假,以「爲輸入碼異步或同步」 :)的

或者你也可以共享代碼或一些背景:)?

編輯:

能給我阻隔或非異步代碼的例子嗎? - 六氰化物

這個問題有關於這個的討論:When is JavaScript synchronous?

同步代碼將是這樣的:

console.log("first"); 
console.log("second"); 
console.log("third"); 

這三行代碼運行的同步 - 第一,二則第三行。

此代碼相反,異步運行:

function f() { 
    alert("first"); 
} 
function g() { 
    alert("second"); 
} 

// defer execution for 1000 ms 
setTimeout(f, 1000); 
// defer execution for 500 ms 
setTimeout(g, 500); 
// run immediately 
alert("third"); 

你會看到「第三」 -alert,然後再「第二」,最後「第一」。這是一個非常人爲的例子,但你會看到回調(f和g)以及流程與同步代碼的根本區別。

你可以閱讀同步代碼,大部分情況都會發生,就像你讀取它們一樣,在異步代碼中,事件會觸發或調用回調,執行路徑可能不如同步阻塞代碼那麼明顯。

Node.js是一個異步代碼的例子,其中大多數函數調用爲成功,失敗和其他可能的應用程序提供了一組回調參數。

EDIT2:

此鏈接具有相同的代碼寫入同步/異步式一些JavaScript例子:Asynchronous Code Design with Node.js

相關問題