我正在Node.js中创建一些模块,并想知道:“在Node.js中何时使用return语句是否有约定?”。
根据我的理解,应该避免返回语句,因为它们会使进程成为阻塞操作,但是是否应该使用它们的指南,何时应该坚持回调?
答案 0 :(得分:2)
是否某些内容“阻止”取决于您 - 是否需要很长时间?
任何IO操作都应该被视为阻塞,因为它依赖于脚本之外的东西(可能需要花费任何时间)。
如果您自己的脚本要说,循环几百次(而且您知道这需要花费超过一秒的时间),您可能会认为它阻塞了。
你的约定应该只是你知道一个函数是异步的,因为它接受一个回调。
答案 1 :(得分:0)
如果这是一个“便宜”的操作,那就完全没问题了。在您不进行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的功能。