我发现了几种使用async / await进行干净错误处理的方法。
有人提议:
.catch()
处理错误(但它混淆了Promise并等待语法)[data, err]
而不是抛出(但它会通过错误检查使代码丑陋)instanceof
块中的catch
上匹配的错误(这很好,但需要定义尽可能多的类)。在我所有代码中实现选项3之前,我想知道为什么在任何地方都找不到以下内容。如果我的AsyncFunction不会引发其他错误,为什么不直接匹配该函数呢?
async function a() {}
async function b() {
throw b;
}
(async () => {
try {
await a();
await b();
}
catch (err) {
switch (err) {
case a: console.log('a threw'); break;
case b: console.log('b threw'); break; // this one is executed
}
}
}) ()
也许有明显的原因使我们不应该这样做,但我被困在那里。