2012-11-17 49 views
1

我想弄清楚如何以某種方式嵌套回調。未來/現在的嵌套回調

var alpha = function(callback){ 
    var x = 5; 
    if(x > 2){ 
     callback(); 
    }else if(x = 10){ 
     callback(); 
    }else{ 
     future(); 
    } 
}; 

var beta = function(callback){ 
    var x = 5; 
    if(x > 10){ 
     callback(); 
    } 
} 

alpha(function(){ 
    beta(function(){ 
     // also run future(); 
    }); 
}); 

比方說,我想future()和β的callback()是同樣的事情,或者至少運行中都相同的代碼。我將如何做到這一點?請忽略我的基本>示例。

我試圖讓我的代碼更乾燥。讓我們只是說,測試版在alpha()內運行多次,但future()函數已經趕上了測試版的回調。

更新

我想變得冗長這樣避而遠之。

var alpha = function(callback){ 
    var x = 5; 
    if(x > 2){ 
     //---  
     var x = 5; 
     if(x > 10){ 
      callback(); 
     } 
     //--- 
    }else if(x = 10){ 
     //--- 
     var x = 5; 
     if(x > 10){ 
      callback(); 
     } 
     //--- 
    }else{ 
     callback(); 
    } 
}; 
+1

只是爲了澄清,你的意思是使用相等運算符(''==),而不是在你的'if'子句中賦值('=')? –

+0

是的,但它無關緊要。 – ThomasReggi

回答

1

您可以接受2個回調函數在你的代碼,還可以定義命名函數(或變量),並用它在測試回調

var alpha = function(callback, callback2){ 
    var x = 5; 
    if(x > 2){ 
     callback(); 
    }else if(x = 10){ 
     callback(); 
    }else{ 
     callback2(); 
    } 
}; 

var beta = function(callback){ 
    var x = 5; 
    if(x > 10){ 
     callback(); 
    } 
} 

alpha(function(){ 
     beta(function(){ 
      future(); 
     }); 
    }, function future(){ 
    // your code here 
}); 
0

我不知道如果我理解正確, ,但如果我這樣做,你的問題是你想在你的回調中調用某種行爲。要做到這一點,你可以簡單地傳遞行爲到外回調,然後下降到你內心的回調作爲附加參數:

var alpha = function(future, callback) { 
    [...] 
    else if(x == 10) { 
     callback(future); // Where callback would be beta 
    } else { 
     future(); 
    } 
} 

alpha(future, function(future) { 
    beta(function() { 
     future(); 
    }); 
}