2016-03-29 11 views
2

コールバックを処理する方が正しいですか?1つまたは2つのコールバックを使用した関数コールバック処理?

渡す個々の成功と失敗のコールバック関数

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

または成功/コールバック内に応答を失敗を扱いますか?

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

、私は両方のバージョンが、仕事の両方を利用し得ることに気づいた、と関係する個人の選択のある程度があるが、私は1つのバージョン他よりも好ましい理由をサポートするためのいくつかの事実があります確信しています使用が互いに重複しないことを保証する場合。

答えて

2

関数のユーザーの観点からは、最初の方法が優れていると主張します。理由は、それは彼/彼女のためのより少ない仕事を残し、またよりきれいなコードを可能にするということです。ユーザーは、エラーが発生したかどうかを判断することについて心配する必要はなく、エラーの場合にエラーハンドラが呼び出されることを知っています。第二の方法で

// Clean, modularized logic 

function success() { 
    // handle success 
} 

function error() { 
    // handle error 
} 

doAsynchCall(success, error); 

エラーが起こったと、基本的にどこ続行するかを決定するために、再度をif声明の作業を行う必要がありました場合には、単純に関数を呼び出すことで、ユーザーは知りません。

// does essentially the same stuff as doAsynchCall 
function handler(error, data) { 
    if (error !== null) { 
    // handle error 
    } else { 
    // handle success 
    } 
} 

doAsynchCall(handler): 

ただし、状況は基本的には機能設計者の観点から逆転しています。彼/彼女にとっては、エラーを最初の引数として渡す方が簡単で、エラーの処理方法と分岐先をユーザーに決定させることができます。

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

エラーからデータを分離するのを忘れました。ありがとう – Daniel

関連する問題