有没有办法在Node.Js中进行阻塞调用?

有没有办法在Node.Js中进行阻塞调用?,node.js,Node.js,使用continuations(回调)编程要比直接顺序执行的模型难几倍。NodeJ可以进行阻塞呼叫吗?是的,它可以。例如,您可以使用fs.readFileSync()而不是fs.readFile()读取文件。每个库通常为同步/阻塞方法提供一个xxxSync方法 但是您不应该经常使用sync方法。记住Node.js对JavaScript代码使用单个执行线程。如果你阻止这个线程,你就可以为每个人阻止它(不像C#/Java那样,C#/Java会为每个请求创建一个新线程) 如果异步方法对您来说太多,您可

使用continuations(回调)编程要比直接顺序执行的模型难几倍。NodeJ可以进行阻塞呼叫吗?

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

但是您不应该经常使用sync方法。记住Node.js对JavaScript代码使用单个执行线程。如果你阻止这个线程,你就可以为每个人阻止它(不像C#/Java那样,C#/Java会为每个请求创建一个新线程)


如果异步方法对您来说太多,您可能需要使用另一个平台(Ruby、Python、PHP)

是的,node.js 0.11.x可以在生成器内部执行阻塞调用。所谓“阻塞调用”,我指的是暂时停止当前函数的执行。看看图书馆

这是执行阻塞调用的唯一推荐方法

除此之外,您可以查看,但需要谨慎使用,而不是在通用库中使用


前面还提到了几个*同步调用,但请避免完全使用它们,除非您编写一行程序。

您可以使用类似
async
的模块来帮助管理回调链。如果您所做的只是文件系统访问,那么您可以使用
fs
模块中的同步函数。否则,就没有生成异步功能块的机制。正如@Joe提到的,您应该更有效地管理回调。当你习惯它的时候,它并不难,也不复杂。它并不太复杂,只是有时会带来不必要的复杂性。在语言本身(如生成器)或可用的库(如异步)上所做的一些工作可以在语法上有所帮助,但我听你这么说。有时,您只需要一个简单的顺序工作流,而Node.js中的工作流不如其他语言中的工作流整洁。