似乎最好的做法是不要在try主体中放置多行业务逻辑
其实我会说是的。通常,您需要使用该值来处理catch
所有 异常:
try {
const createdUser = await this.User.create(userInfo);
console.log(createdUser)
// business logic goes here
} catch (error) {
console.error(error) // from creation or business logic
}
如果您只想抓住并处理承诺中的错误,则有三种选择:
在外部声明变量,然后根据是否存在异常进行分支。可以采用多种形式,例如
测试要分配的变量的值
let createdUser; // or use var
inside the block try { createdUser = await this.User.create(userInfo); } catch (error) { console.error(error) // from creation } if (createdUser) { // user was successfully created console.log(createdUser) // business logic goes here }
测试捕获到的异常的类型,然后根据该异常进行处理或重新抛出。
try {
const createdUser = await this.User.create(userInfo);
// user was successfully created
console.log(createdUser)
// business logic goes here
} catch (error) { if (error instanceof CreationError) { console.error(error) // from creation } else { throw error; } }
不幸的是,标准JavaScript(仍然)不支持条件异常的语法。
await this.User.create(userInfo).then(createdUser => {
// user was successfully created
console.log(createdUser)
// business logic goes here
}, error => { console.error(error) // from creation });
当然,它带有引入回调函数的缺点,这意味着您不能像从外部函数那样轻松地break
/continue
循环或执行早期操作return
。