2016-10-22 2 views
0

Я стараюсь, чтобы мое развитие было максимально модульным и простым в использовании, но я чувствую, что это может занять слишком много времени.Имеет функцию как параметр для функции, такой как синтаксически приемлемый?

Я вызываю функцию, которая использует функцию, которая возвращает данные в качестве параметра, который также использует функцию, которая возвращает данные. Таким образом, они вложены как таковые:

append_vid(
    compile_data(
     request_data(vid_id) 
    ) 
); 

Таким образом, request_data() возвращает объект, который использует compile_data вернуть другой объект append_vid().

Мне интересно, является ли это синтаксически приемлемым, поскольку я никогда не видел, чтобы кто-то гнездовал как параметры, подобные этому раньше. Существует ли более эффективный или стандартизированный метод достижения этого без потери модульности отдельных функций.

+0

Это синтаксически допустимо, если это не приводит к синтаксической ошибке. Параметр для функции может быть любым выражением произвольной сложности, включая, конечно, один, включающий другой вызов функции. Я не знаю, почему вы будете искать «более эффективный или стандартизованный метод» для этого. Кстати, ваш код не имеет никакого отношения к обратным вызовам или модульности, однако вы это понимаете. –

+0

Это аргумент не параметр, а вызов не функция. Но да, это полностью стандарт (без отступов). – Bergi

ответ

2

Это полностью допустимый синтаксис. Если вы смотрите на синхронные вызовы.

function MethodOne(value) { 
 
    console.log(value); 
 
} 
 

 
function MethodTwo(value) { 
 
    console.log(value); 
 
    return value * 4; 
 
} 
 

 
function MethodThree(value) { 
 
    console.log(value); 
 
    return value * 2; 
 
} 
 

 
MethodOne(
 
    MethodTwo(
 
    MethodThree(1) 
 
) 
 
);

Если вы значения возвращаются из асинхронного вызова, то вы должны изменить подпись метода и использовать обещание. Вот пример для Async.

function MethodOne(value) { 
 
    var promise = new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
     value = value * 4; 
 
     console.log(value); 
 
     resolve(value); 
 
    }, 1000); 
 
    }); 
 
    return promise; 
 
} 
 

 
function MethodTwo(value) { 
 

 
    var promise = new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
     value = value * 2; 
 
     console.log(value); 
 
     resolve(value); 
 
    }, 1000); 
 
    }); 
 

 
    return promise; 
 
} 
 

 
function MethodThree(value) { 
 
    console.log(value); 
 
    var promise = new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
     resolve(1) 
 
    }, 1000); 
 
    }); 
 
    return promise; 
 

 
} 
 

 
MethodThree(1).then(MethodTwo).then(MethodOne);

+0

Завершилось выполнение немного обещаний; очень удобно, так как я имею дело с ajax-запросом. – sparcut

Смежные вопросы