我可能正在寻找一些不可能的东西,但无论如何,让我们试试看。请考虑执行一些有条件的远程操作的以下伪代码,该代码在完成时执行回调。但在回调的代码需要即使远程操作不neccessary被执行:有条件地称为匿名函数的良好语法
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();
}
);
...但我不完全确定,这是否更具可读性和可管理性。特别是当涉及大量本地/远程/回调参数/闭包变量或者需要在另一个呼叫的回调中“嵌入”一个远程呼叫时。我希望在这种情况下可以使用更好的语法。
谢谢,但我表明,命名函数不是一个选项在这里。 :-) –