我在 Node.js 中制作了一些模块并想知道:“是否有关于何时在 Node.js 中使用 return 语句的约定?”。
据我了解,应该避免使用 return 语句,因为它们会使进程成为阻塞操作,但是是否有关于何时应该使用它们以及何时应该坚持回调的指南?
我在 Node.js 中制作了一些模块并想知道:“是否有关于何时在 Node.js 中使用 return 语句的约定?”。
据我了解,应该避免使用 return 语句,因为它们会使进程成为阻塞操作,但是是否有关于何时应该使用它们以及何时应该坚持回调的指南?
是否“阻塞”取决于您 - 是否需要很多时间?
任何 IO 操作都应该被认为是阻塞的,因为它依赖于脚本之外的东西(这可能需要任何时间)。
如果您自己的脚本要说,循环某个东西几百次(而且您知道这需要不到一秒钟的时间),您可能会认为它阻塞了。
您的约定应该只是您知道函数是异步的,因为它接受回调。
如果这是一个“便宜”的操作,那很好。任何在不执行 CPU 密集型操作的情况下多次执行的操作都可以(并且通常应该)重构为“正常”功能。这可以:
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);
});
});
});
});
}
}
线程不会被长时间阻塞的地方。
是的,更好的选择是以迭代方式实现斐波那契,而不是递归方式。但这只是为了演示如何“拆分”一个 CPU 密集型功能。