callback() or return callback()

2020-05-13 01:54发布

It's possible I don't understand Node's event loop well enough.

Say I have a function foo which contains an asynchronous function async_func. Do I have

//1
function foo(callback) {
       //stuff here
       async_func(function() {
            //do something
            callback();
       });
//this eventually get executed
}

or

//2
function foo(callback) {
       //stuff here
       async_func(function() {
            //do something
            return callback();
       });
//never executed
}

1条回答
欢心
2楼-- · 2020-05-13 02:53

Actually, in your sample 2, //never executed will be execute every time. It's returning from the callback, not from the wrapping function.

Sometimes the caller actually expects some return value and the behavior can change based on that. Another common reason to see a return callback() is just a clear way of short circuiting the function you're in. For example.

function doSomething(callback) {
    something(function(err, data) {
        if(err) return callback(err);
        // Only run if no error
    });
    // Always run
}

Even though the return value isn't being used, it's using return to ensure that execution doesn't continue past the error conditional. You could just as easily write it this way which has the same effect.

function doSomething(callback) {
    something(function(err, data) {
        if(err) {
            callback(err);
            return;
        }
        // Only run if no error 
    });
    // Always run
}
查看更多
登录 后发表回答