在Node.js中有何时使用同步函数?

我在Node.js中创build了一些模块,并想知道:“Node.js中是否有使用return语句的约定?”。

根据我的理解,应该避免使用返回语句,因为它们会使得这个过程成为一个阻塞操作,但是有什么时候应该使用它们的指导方针,以及何时应该坚持callback?

无论是否“阻塞”取决于您 – 是否需要很多时间?

任何IO操作都应该被认为是阻塞的,因为它依赖于脚本之外的东西(这可能需要任何时间)。

如果你自己的脚本是说,循环几百次(你知道这需要超过一秒钟),你可能会认为它阻止。

  • 如果一个方法被阻塞,它应该接受一个“callback”参数,并且asynchronous地调用它。
  • 如果一个方法是非阻塞的,它不应该接受一个“callback”参数,并且至less应该有一个“返回”语句。

你的约定应该只是你知道一个函数是asynchronous的,因为它接受一个callback。

如果这是一个“便宜”的操作,那就太好了。 如果您不进行CPU密集型操作,多次执行的任何操作都可以(通常应该)重构为“正常”function。 这可以:

function add(x, y) { return x + y; } 

这不是:

 function fib(n) { if (n <= 1) return 1; // this may take a long time if n is large return fib(n - 1) + fib (n - 2); } 

fib的一个可能的实现可以用一个函数来返回结果作为参数,并将计算分散在多个调用中。 类似下面的代码,从“ Node Web Development ”一书中得到:

 function fib(n, done) { if (n <= 1) { done(1); } else { process.nextTick(function() { fib(n - 1, function(val1) { process.nextTick(function() { fib(n - 2, function(val2) { done(val1 + val2); }); }); }); }); } } 

那里的线程不会被阻塞很长时间。

是的,更好的select是以迭代的方式实现斐波纳契,而不是recursion的。 但这只是为了演示如何“分裂”一个CPU繁重的function。