こんにちは。Twitterで完全に俺の意見ということが判明しましたが、残しておきます
async関数の場合
const f1 = async () => {
return await Promise.reject(new Error("e"));
};
const f2 = async () => {
throw new Error("e");
};
f1()
.catch(e => console.log(e));
try {
f2();
} catch (e) {
console.log(e);
}
さて、間違っている箇所がわかるでしょうか?
実行すればすぐにわかることですが、async funcitonの中で投げられた例外はPromise.prototype.catch()でないと受け取ることができません。そもそもこのような間違いを犯さないためにも、Promiseの中のエラー送出はPromise.reject()を利用すべきです。
Promiseの場合
前を踏まえれば当然次のようなコードになります。
const f1 = () => new Promise(() => {
throw new Error("e")
})
const f2 = () => new Promise((resolve, reject) => {
reject(new Error("e")
})
f1().catch(e => console.log(e));
f2().catch(e => console.log(e));
終わり。asyncの中でthrow new Error()、asyncの利用側でtry~catchはやめておきましょう。
Top comments (0)