This question already has an answer here:
Where to put returns around callbacks with node.js
                                
                                    (1个答案)
                                
                        
                                6年前关闭。
            
                    
我只是想知道返回回调是否有所不同。

It was already asked here on SO,但实际上没有任何IO功能使用CPS的Node上下文中。我没有将此问题标记为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);
    });
}

最佳答案

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

// 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')
    });
}


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

// 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')
    });
}

关于node.js - 返回或不回调,是否对 Node 有所不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21038808/

10-11 23:59
查看更多