2014-02-26 24 views
0

是否可以將回調參數從回調函數塊本身傳遞給另一個方法?例如:將回調函數作爲參數從本身傳入

var resultCallback = function(result){ 
    if(result) 
    { 
     alert('success!'); 
    }else{ 
     callServiceB(resultCallback); 
    } 
} 

callServiceA(resultCallback); 

原因是我希望在JavaScript中鍛鍊類似責任鏈模式的東西。

嘗試使用Google搜索,但迄今爲止一無所獲。任何想法或評論都歡迎。

+1

是的,你可以。你試過了嗎? – Bergi

+0

然而,將同一個函數中的責任鏈('callServiceB')和生成的動作('alert('success!')')放在同一個函數中是奇怪的/壞的練習/設計異味。對結果使用單獨的回調。它可能看起來像'callServiceA(orCallServiceB(alertResult))'或'(callServiceA,callServiceB)(alertResult)' – Bergi

+0

實際上情況下有很多調用其他方法,爲簡潔起見我簡化爲2。邏輯就像1.調用函數a 2.如果函數a ok,然後調用函數b 3.如果函數b ok,然後調用函數c,等等。 – ipohfly

回答

0

是否可以將回調參數從回調函數塊本身傳遞給另一個方法?

是的,你可以。嘗試一下!

我想鍛鍊類似的責任模式

一個鏈條把雙方的責任鏈(callServiceB(resultCallback)),並在同一個函數產生的動作(alert('success!'))看起來像一個壞習慣/設計氣味。您應該對結果使用額外的回調,並將鏈條的聲明與此分開。

它可能看起來像callServiceA(orCallServiceB(alertResult))either(callServiceA, callServiceB, …)(alertResult)

的邏輯是像1.呼叫功能的2.如果功能的確定,然後調用函數b 3.如果函數b確定,然後調用函數c,等等。 - ipohfly 8分鐘前

這聽起來不像chain of responsibility,只有當前失敗(無法處理參數)時才調用下一個函數?你所描述的聽起來更像是monadic鏈接(依靠前一個動作的一個動作) - 請看promises那個:

callServiceA.then(callServiceB).then(…).then(resultCallback);