2014-02-17 54 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调用,但是除非你写一行代码,否则请尽量避免使用它们。

相关问题