2017-02-28 9 views
0

このコードを検討してください。 first catchブロックが実行されるとしたら、問題はtestPまたは約束のfirst thenによって引き起こされたかどうかを判断する方法が問題です。約束コードに矛盾があります

var testP = function(){ 
    return new Promise(function(resolve, reject){ 
     //reject or resolve 
    }); 
} 

testP().then(function(res){ 
    console.log("first then"); 
    console.log(res); 
    return new Promise(function(resolve,reject){ 
     // reject or resolve 
    }) 
}) 
.catch(function(err){ 
    console.log("first catch"); 
    console.log(err); 
}) 

答えて

0

できません。

区別したい場合は? 2番目の引数はthenです。

testP().then(function(res){ 
    console.log("first then"); 
    console.log(res); 
    return new Promise(function(resolve,reject){ 
     // reject or resolve 
    }) 
}, function(err){ 
    console.log("first catch"); 
    console.log(err); 
}) 
.catch(function(err){ 
    console.log("second catch"); 
    console.log(err); 
}) 
+0

OPで「エラー」のタイプを確認できませんでしたか? – niceman

+0

@nicemanはい、まあまあ、約束が特定の誤りで拒否された場合、そうすることができます。 'reject(新しいError(" TESTP_ERROR "))'と 'reject(新しいError(" THEN_ERROR "))'を呼び出すと、キャッチコールバックで 'err.message'をチェックしてそれに応じて動作します。 Morever、もしあなたが 'Error'を拡張する独自のエラーを定義するルートを望むなら、' if(err instanceof MyCustomError')をチェックすることができます。一般に、他のランタイムエラーも同様にコード内で起こることに注意してください。定義されていないオブジェクト上にあるので、それらも 'catch'コールバックを呼び出すことを考慮する必要があります。 –

+0

通常、これを解決する方法は、あなたが捕捉しているエラーのタイプを区別することです。特定のエラーを処理してチェーンをそこから続けるには、捕捉したい '.then()'の人のエラーの直後に '.catch()'を置く。 – jfriend00

関連する問題