返回或不回调,它是否会对节点产生影响

时间:2014-01-10 07:52:25

标签: node.js v8

我只是想知道返回回调是否有所作为。

It was already asked here on SO但不在Node的上下文中,几乎任何IO功能都使用CPS。我没有将此问题标记为Javascript,因为我认为它与语言无关,但更具体的是nodejs和v8如何在内部工作。

这两个版本的foo函数

之间有什么区别(对于V8)
// foo that returns cb();
function foo(cb) {
    fs.read(fd, buffer, 0, 10, 10, function(err, bytesRead, buffer) {
        return cb(buffer);
    });
}

// foo that won't return cb()
function foo(cb) {
    fs.read(fd, buffer, 0, 10, 10, function(err, bytesRead, buffer) {
        cb(buffer);
    });
}

1 个答案:

答案 0 :(得分:2)

在这种情况下它不会,因为回调下面没有代码。如果您在回调下有代码,例如

// foo that won't return cb()
function foo(cb) {
    fs.read(fd, buffer, 0, 10, 10, function(err, bytesRead, buffer) {
        cb(buffer);
        console.log('yup')
    });
}

然后代码将在回调后继续执行。但是如果添加返回,控制台将永远不会执行

// foo that won't return cb()
function foo(cb) {
    fs.read(fd, buffer, 0, 10, 10, function(err, bytesRead, buffer) {
        return cb(buffer);
        //will never execute below
        console.log('yup')
    });
}