Обратный вызов() или обратный вызов()

Возможно, я недостаточно разбираюсь в контуре событий Node.

Скажем, у меня есть функция foo, которая содержит асинхронную функцию async_func. У меня есть

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

или

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

Ответ 1

Собственно, в вашем примере 2 //never executed будет выполняться каждый раз. Он возвращается из обратного вызова, а не из функции обертывания.

Иногда вызывающий абонент действительно ожидает какое-то возвращаемое значение, и поведение может измениться на основе этого. Еще одна распространенная причина увидеть обратный вызов() - это просто четкий способ короткого замыкания функции, в которой вы находитесь. Например.

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

Даже если возвращаемое значение не используется, оно использует return, чтобы гарантировать, что выполнение не будет продолжено после ошибки. Вы можете так же легко записать его таким образом, который имеет тот же эффект.

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