クイズ: 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に出会うまでスキップされます。エラーを上書きしたい場合は、エラーでない値を返すだけです。その値はその後のどの.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 は、単に通常の値を返すことでエラーを無視(または上書き)するために使用できます。
このトリックは、その後に値を受け取る .then がある場合にのみ機能します。
