クイズ: JavaScript Promise 問題9問
もうPromiseを取りこぼさない!

JavaScriptのPromiseを知っていますか?
- JavaScriptのスキルを証明してみましょう! 🚀
- ヒントを確認する(右下の大きなボタン)。
- ブラウザのコンソール(ショートカットキー
F12または検索)でコードを試すか、repl.it* を使用してください。 - ぜひ私にツイートしてください @justsml. ご意見をお聞かせください!
👇 以下の9問を解いてください👇
次のコードの出力は何になるか?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))Promiseコンストラクタを使ってPromiseを作成し、直ちにrejectコールバックでエラーを発生させます。
その後、.catchハンドラはDOMの.addEventListener(event, callback)やEvent Emitterの.on(event, callback)のように、複数のハンドラコールバックを追加することができます。同じ引数でそれぞれが呼び出されます。
次のコードの出力は何ですか?
var p = new Promise((resolve, reject) => { return Promise.reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))Promiseコンストラクタを使用する際は必ずresolve()またはreject()コールバックを呼び出さなければなりません。Promiseコンストラクタはエグゼキュータの戻り値を無視するため、Promise.reject()で作成された追加のPromiseはpにチェーンされません。2つのハンドラはpにアタッチされますが、pは未解決のままになり、戻された拒否済みPromiseはホスト環境によって未処理として報告されます。
次のコードの出力は何になりますか?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error)).then(error => console.log(error)).thenと.catchをチェーンする際には、それらが一連のステップであると考えると役立ちます。各.thenは前の.thenが返した値(引数として)を受け取ります。ただし、“ステップ”でエラーが発生した場合、その後の.thenの”ステップ”は.catchに出会うまでスキップされます。拒否を処理して履行状態にするには、通常の値を返します。Errorオブジェクトも、返すだけなら通常の値として扱われます。再び拒否状態にするにはthrowするか、拒否されたPromiseを返します。Promiseを返す場合は、その最終的な状態が引き継がれます。その値はその後のどの.thenでもアクセス可能です。
以下のコードの出力は何になりますか?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error.message)).catch(error => console.log(error.message)).catchをチェーンする場合、それぞれの.catchは前の.thenまたは.catch”ステップ”で発生したエラーメッセージのみを処理します。この例では最初の.catchがconsole.logを返しており、両方の.catchの後に.then()を追加しない限りアクセスできません。
次のコードの出力は何になるか?
new Promise((resolve, reject) => { resolve('Success!') }) .then(() => { throw Error('Oh noes!') }) .catch(error => { return "actually, that worked" }) .catch(error => console.log(error.message))ヒント: .catch は、単に通常の値を返すことでエラーを無視(または上書き)するために使用できます。
通常の値を返せば拒否状態は処理され、後続のPromiseは履行状態になります。後に .then がなくても拒否は処理されますが、返した値を使うには .then などが必要です。
以下のコードの出力結果は?
Promise.resolve('Success!') .then(() => { throw Error('Oh noes!') }) .catch(error => { return 'actually, that worked' }) .then(data => { throw Error('The fails!') }) .catch(error => console.log(error.message))最初の .catch は文字列を返して拒否状態から回復しますが、何も出力しません。次の .then が Error('The fails!') をスローし、最後の .catch はそのメッセージ The fails! だけを出力します。
