Я, вероятно, ищу что-то невозможное, но в любом случае давайте попробуем. Пожалуйста, рассмотрите следующий псевдо-код, который выполняет некоторую условную, удаленную операцию, которая выполняет обратный вызов после завершения. Но код в функции обратного вызова должен быть выполнен, даже если дистанционное управление не необходимое:Хороший синтаксис для анонимной функции, которая называется условно
if (needsToSave)
{
performRemoteOperation(operationParameters, function() {
doSomeCleanup();
doSomeMoreCleanup();
setSomeStatus();
});
}
else
{
doSomeCleanup();
doSomeMoreCleanup();
setSomeStatus();
}
Я нахожу этот код особенно некрасиво и неуправляемым. Легко опустить изменение, сделанное для блока обратного вызова в соответствующем безусловном блоке. В некоторых именованных функциях существует очевидное решение обертывания кода, но это уже не анонимный встроенный код. :-)
Лучшее, что я могу думать о том, чтобы обернуть весь код в некоторой условной вызывающей:
function conditionalCall(condition, action, callback)
{
if (condition)
action(callback)
else
callback()
}
Тогда мой код сбросит на:
conditionalCall(needsToSave,
function(_callback) {
performRemoteOperation(operationParameters, _callback)
},
function()
{
doSomeCleanup();
doSomeMoreCleanup();
setSomeStatus();
}
);
... но я не совсем уверен, является ли это более читаемым и управляемым. Особенно, когда задействовано множество параметров локального/удаленного/обратного вызова/закрытия, или нужно «внедрить» один удаленный вызов в обратный вызов другого вызова. Надеюсь, что в таком сценарии можно использовать более синтаксис.
Спасибо, но я заявил, что именованные функции здесь не являются опцией. :-) –