我可能正在尋找一些不可能的東西,但無論如何,讓我們試試看。請考慮執行一些有條件的遠程操作的以下僞代碼,該代碼在完成時執行回調。但在回調的代碼需要即使遠程操作不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();
}
);
...但我不完全確定,這是否更具可讀性和可管理性。特別是當涉及大量本地/遠程/回調參數/閉包變量或者需要在另一個呼叫的回調中「嵌入」一個遠程呼叫時。我希望在這種情況下可以使用更好的語法。
謝謝,但我表明,命名函數不是一個選項在這裏。 :-) –