質問: new Promise(() => { setTimeout(() => { return Promise.reject("まずいエラー"); }, 1000); }).catch(e => { console.log("まずいことが起きた"); // catchできるはずが・・・ console.log(e); }); // uncaught exception: まずいエラー が発生してしまう ``` ### 試したこと コード1を実行したあとにpromise1変数の中身をみたらstateがfulfilledになっていて、非同期処理が完了した状態になっていた しかし、コード2ではthrowが実行されてもpendingのままになっていた setTimeoutはPromise内部でも非同期で実行されるからこういう動きになるのか・・・?と考えたんですが 非同期で実行しているPromise内でsetTimeoutが非同期的に実行されるってなんだよ?という疑問が生まれてしまい、いまいち全体的な動きが理解できずにいます ### 補足情報(FW/ツールのバージョンなど) ブラウザのコンソールで確認してます よろしくお願いします
回答: やりたいのってこういうことですか? ``` var promise3 = new Promise((resolve, reject) => { setTimeout(() => { return reject("まずいエラー"); }, 1000); }).catch((e) => { console.log(e); }); ``` ### 追記 `Promise`は、生成したときに渡すコールバックの引数に渡ってくる`resolve`と`reject`の実行を待っているにすぎません。 その他は基本的に生成時に実行し、その結果も気にせず無視します。 コールバックの引数に渡ってきた`resolve`または`reject`を実行しないと無意味です。 コールバック内で新たな`Promiseオブジェクト`を生成したところで、それは別物なので関係ありません。 **コード2**はそれですね。 `Promise.reject()`は新しい`Promiseオブジェクト`を生成します。