2014-02-17 59 views
1

使用延續(回調)而不是直接順序執行的模型編程幾次會更困難。 NodeJs可以阻止呼叫嗎?有沒有辦法在Node.Js中進行阻塞調用?

+0

您可以使用像async這樣的模塊來幫助管理回調鏈。 – Joe

+0

如果你所做的只是文件系統訪問,那麼你可以在'fs'模塊中使用同步功能。否則,沒有任何機制可以製作異步功能塊。正如@Joe提到的,您應該更有效地管理回調。當你習慣它時,這並不難或複雜。 – qubyte

回答

2

是的,它可以。例如,您可以使用fs.readFileSync()而不是fs.readFile()讀取文件。每個庫通常爲同步/阻塞方法提供一個xxxSync方法。

但是你不應該經常使用同步方法。請記住,Node.js對JavaScript代碼使用單個執行線程。如果你屏蔽了這個線程,你就可以爲每個人屏蔽它(不同於C#/ Java,其中每個請求都會創建一個新線程)。

如果異步方法對你來說太多了,你可能想使用另一個平臺(Ruby, Python,PHP)。

+0

它不是太多它只是帶來不必要的複雜性有時 –

+0

在語言本身(如生成器)或可用庫(如異步)上完成的一些工作可以幫助語法,但我聽到你的聲音。有時候你只需要一個簡單的順序工作流程,並且它在Node.js中幾乎不像其他語言那樣整潔。 –

0

是的,node.js 0.11.x可以在發生器內部進行阻塞調用。通過「阻止呼叫」我的意思是停止執行當前的功能一段時間。看看co庫。

這是唯一推薦的阻止呼叫方式。

除此之外,你可以看看fibers,但它需要謹慎使用,而不是通用庫。

前面提到的還有一些* Sync調用,但是除非你寫一行代碼,否則請儘量避免使用它們。

相關問題