2017-05-04 8 views
3

私はかなりの時間NodeJSコードを書いており、人によって実装されたさまざまな手法を見てきました。私の質問は天気です。それは、シグネチャがPromiseを返し、パラメータアサーションが失敗したときに直接スローする機能を持つベストプラクティスと見なされます。関数がPromiseを返すときに、Javascriptのパラメータアサーションを直接スローする必要がありますか?

あなたはこれを行うべきだと思いますか? :

スロー同期方法

function asyncPromise(param) { 
    assert(param, 'Missing required parameter'); 
    // Param ok 
    return Promise.resolve(param); 
} 

ORこの? :

拒否約束

function rejectPromise(param) { 
    if (typeof param === 'undefined') { 
     return Promise.reject(new Error('Missing required parameter')); 
    } 
    // Param valid 
    return Promise.resolve(value); 
} 

私の腸が機能を持っているしかしとき、続けてはならないものとして考慮されるべきで直接間違ったパラメータ入力以来投げるの最初の道のために行くために私に言っていますPromiseを返すシグネチャ、呼び出し元はエラーの.catch処理を期待し、直接スローされた場合はエラーを見逃します。

あなたの意見は?

+0

意見を求めることは、このサイトの範囲外です。https://stackoverflow.com/help/on-topic – Purefan

+0

私は「実行」を使用しますが、実行者の内部で行います。これは '.reject'と同じですが、より明示的です。 – georg

+1

@Purefanおそらく、適切な定義ではないと思うかもしれません...おそらく、ベストプラクティスと思われるものを質問していると思います(もしあれば) – mitsos1os

答えて

-1

多分、問題は、非同期の約束について尋ねるが、同期コードの例を使用することです。エラーが発生する可能性が二つの場所があります。このコードでは

/** 
* @return Promise Resolved when a value is accepted, rejected otherwise. 
* @throw AssertionException When no parameter is given. 
*/ 
function asyncPromise(param) { 
    assert(param, 'Missing required parameter'); 

    var promise = new Promise(param); 
    something.process(promise); //start asynchronous process 

    return Promise; 
} 

//somewhere else while processing 
try { 
    doSomething(); 
} catch (Exception err) { 
    promise.reject(err); 
} 

//somewhere else after processing is done 
if (success) { 
    promise.resolve(result); 
} 
else { 
    promise.reject(error); 
} 

正しい関連するコードは次のようになります。A)同期エラーで、安全に投げることによって処理することができasyncPromise()でExceptionとB)Exceptionをスローする処理は処理を停止するが、コードをフリーズした元の関数に返すことはない。このような場合、で例外をスローするのではなく、約束を拒否する必要があります。

約束を拒否するか例外をスローすることによってケースAを解決するかは、問題の原因によって異なるはずです。問題が原因で約束(またはそれに関連するもの)を作成または処理できない場合は、例外を返す必要があります。一方、あなたが安全に約束を作成することができますが、処理を開始しようとするときに問題が発生した場合は、約束を拒否する必要があります。また、約束を拒否する正当な理由は、プロセスを開始する理由がないことを認識したときです(たとえば、既に試して失敗したときなど)。


また、機能が明確にそれは約束を返しますが、パラメータが定義されていない場合は、例外を投げることができると述べていることノート。その通りに誰もが何を期待するかを知っていますとそれを使用する方法。

関連する問題