非同期関数の s を呼び出し元にバブルアップさせようとしましたがreject
、何らかの理由で機能しません。テスト済みのコード例を次に示します。
"use strict";
class Test {
constructor() {
this.do1();
}
async do1() {
try { this.do2(); } catch(reason) { console.error(reason); }
}
async do2() {
for(let i = 0; i < 10; i++) {
await this.do3();
console.log(`completed ${i}`);
}
console.log("finished do1");
}
async do3() {
return new Promise((resolve, reject) => {
setTimeout(() => {
if(Math.random() < 0.3) reject('###rejected');
else resolve("###success");
}, 1000);
});
}
}
export default Test;
Chrome では毎回これが表示されます: Unhandled promise rejection ###rejected
.
なぜこれが起こっているのですか?より高いレベルからスローされたすべてのエラーを処理できるようにしたいと考えていますdo2()
(上記の例は、try/catch が indo2()
および wrapsの場合に正常に動作しますawait this.do3();
)。ありがとう!
編集:もう少し明確にするために、次のように try/catch を取り出して挿入するとdo1()
、do2()
すべて正常に動作します。
async do2() {
try {
for(let i = 0; i < 10; i++) {
await this.do3();
console.log(`completed ${i}`);
}
console.log("finished do1");
} catch(reason) { console.error(reason); }
}