2016-08-23 11 views
0

return Promise.reject(...)を特に使用しない限り、次のコードではPromise.rejectは機能しません。どうしてこれなの?なぜPromise.reject()は返品を必要としますか?

Promise.resolve('Promise 1 Done') 
.then(function(result) { 
    console.log(result); 
    return 'Promise 2 Done' 
}).then(function(result) { 
    let j; 
    try { 
    j = JSON.parse("invalid will throw"); 
    console.log(j); 
    } catch(err) { 
    Promise.reject('Could not parse JSON'); 
    } 

    console.log(result); 
}).catch(function(err) { 
    console.log(err); 
}); 
+0

あなたが「動作しない」とはどういう意味ですか? – martriay

答えて

1

Promise.reject値を作成し、それがthrowが行うよう機能から壊れる例外をスローしません。値がreturnでなければ無視され、制御フローは継続します。

はあなたが約束のコールバックの内側にあるを考えると、あなたは(そしておそらく必要があります)の代わりに使用することができ

throw new Error('Could not parse JSON'); 
+0

また、 'Promise.rejectを返す( 'JSONを解析できませんでした');で拒否された約束を返します。 – jfriend00

+0

@ jfriend00:OPはすでにそれを知っているので、そうです:-)しかし、[エラー 'でメッセージを囲むことを忘れないでください](http://stackoverflow.com/q/26020578/1048572)。 – Bergi

+1

あなたの答えは、この文脈で利用可能な2つのオプションが他の読者にとっても有用であると思われるとは思わなかった。ちょうど改善を提案する。 OPはまた、この状況に対して約束のコンストラクタで拒否を呼び出すことの違いについて混同される可能性があります。 – jfriend00

関連する問題