2016-03-29 27 views
2

Geri aramaları hangi yöntemle daha doğru yapabilirsiniz?1 veya 2 geri arama kullanarak geri arama işlevi?

geçen bireysel başarısı ve başarısız geri arama fonksiyonları

function doAsynchCall(on_success,on_fail){ 
    //do stuff 
    if(condition === true){ 
     on_success(data); 
    } 
    else 
    { 
     on_fail(error); 
    } 
} 

veya başarılı/geri arama içinde yanıt başarısız taşıma? ,

function doAsynchCall(callback){ 
    //do stuff 
    if(condition === true){ 
     callback(null,data); 
    } 
    else 
    { 
     callback(error,null); 
    } 
} 

ben hem sürümleri hem işi alışması fark ettik ve ilgili kişisel tercih bir dereceye yoktur, ama bir versiyonu diğerinin üzerine tercih edilebilir neden desteklemek için bazı gerçekler vardır eminim veya kullanımın diğeri üzerinde garanti verdiği durumlar.

cevap

2

İşlev kullanıcısı açısından bakıldığında, ilk yolun daha iyi olduğunu söyleyebilirim. Nedeni, onun için daha az iş bırakması ve daha temiz kodlara izin vermesidir. Kullanıcı bir hatanın olup olmadığını belirleme konusunda endişelenmek zorunda kalmaz, bir hata durumunda hata işleyicisinin çağrılacağını bilir. basitçe işlevini çağırarak, kullanıcı esasen bir hata olduysa bilmiyor ve ikinci şekilde

// Clean, modularized logic 

function success() { 
    // handle success 
} 

function error() { 
    // handle error 
} 

doAsynchCall(success, error); 

, nerede devam etmek belirlemek için if açıklamada tekrar çalışmalarını yapmak zorunda. Bununla birlikte, durum temel olarak işlev tasarımcısı perspektifinden ters çevrilmiştir. Onun için, her zaman hatayı ilk argüman olarak iletmek ve kullanıcının nasıl ele alınacağını ve bir hataya nasıl dallanacağını belirlemesine izin vermek daha kolaydır.

function doAsynchCall(callback) { 
    let data = getDataOrAnErrorHappens(); 
    callback(error, data); 
} 
+1

Verileri hatadan ayırmayı unuttum, teşekkürler – Daniel