2017-10-05 13 views
0

Javascriptの約束でライブラリ/未処理の例外と共にあなた自身の生成されたエラーを処理するには?私が直面している問題は、catch()の約束の方法の「キャッチオール」性質によって生成されます。例えば約束されたエラー

、私は次のコードを持っている:物事の

somePromiseFunction() 
.then(result => { 
    // External library or behaviour 
    someCodeThatCanThrowExceptions() 

    if (result.code === 1) { 
     throw 'My own exception' 
    } 
}) 
.catch(err => { 
    // how do I know if this is an exception I don't know or something 
    // that I do want to actually handle? 
}); 

多くは外部ライブラリはように例外をスローすることができ、then()チェーンに間違って行くことができます。たとえば、このようなことが起こったときに "Generic error"を表示したいとします。

しかし、私はコードを検証して早く終了したいと思います(私がこの例でやっているように)、この場合は実際に自分のメッセージ「自分のエラー」を表示します。

私の "exit early" throwと、コードの実行中に間違っている可能性のあるすべてのものを処理するにはどうすればよいですか?

+1

.catchに 'if(err === 'My own exception')'とそれに続くカスタムハンドラとそれに続く汎用ハンドラをチェックするコードがあれば十分でしょうか? –

+0

[このライブラリ](https://github.com/AlexanderMac/n-custom-errors)を宣伝しないでくださいが、必要なのはこれだけです。カスタムエラーを登録し、スローされたエラーがカスタムエラーであることを確認することができます。 – alexmac

+0

[文字列を決してスローしない](https://stackoverflow.com/a/26020867/1048572) – Bergi

答えて

1

具体的には、単純な文字列例外が発生しているため、値を調べる必要があります。

function go() { 
    return new Promise(function(resolve, reject) { 
    throw 'My Exception'; 
    }); 
} 

const x = go() 
    .then(function() { 

    }) 
    .catch(function(ex) { 
    if (ex === 'My Exception') { 
     alert('It was mine'); 
    } 
    }); 

特殊な例外を作成する場合は、正確な文字列ではなく、そのタイプをテストできます。ここで(すなわち、それは名前とメッセージを持っている)window.Errorパターンを以下の例外を除いて一例であるタイプ試験することができること:これはそれかどうかを判断するために、あなたのテストからあなたのメッセージをデカップリングの利点を持っている

var MyError = (function() { 
    function MyError(message) { 
    this.message = message; 
    this.name = 'MyError'; 
    } 
    return MyError; 
}()); 

function go() { 
    return new Promise(function(resolve, reject) { 
    throw new MyError('Something went wrong'); 
    }); 
} 

const x = go() 
    .then(function() { 

    }) 
    .catch(function(ex) { 
    if (ex instanceof MyError) { 
     alert('It was mine'); 
    } 
    }); 

あなたのエラーですか。

関連する問題