Try/catch 承诺还是只是抓住?
Try/catch a promise or just catch?
this.$auth.loginWith
returns 一个承诺,但我不确定是否应该将其包装在 try/catch 中,或者只是在承诺上使用 catch
。
哪种方法正确?
Try/Catch:
async login() {
try {
const response = await this.$auth.loginWith('laravelSanctum', {
data: {
email: 'xxx',
password: 'xxx',
},
});
this.$auth.setUser(response.data.data);
} catch (e) {
}
},
捕获:
async login() {
const response = await this.$auth.loginWith('laravelSanctum', {
data: {
email: 'xxx',
password: 'xxx',
},
}).catch(function(e) {
});
this.$auth.setUser(response.data.data);
},
一般来说,最好的做法是 而不是 将 async
/await
与使用承诺方法(.then
、.catch
), 所以你的 try
/catch
通常是这两个选项中更好的一个。
和 的一个很好的理由:当你混合这样的隐喻时,阅读流程可能会很棘手,在你的情况下,使用 .catch
的版本实际上会导致一个错误,因为您的特定 catch
处理程序使用 undefined
将拒绝转换为实现,因此代码在 await
之后继续,并在 response
时尝试执行 this.$auth.setUser(response.data.data);
是 undefined
,导致似乎与登录无关的新错误。
但通常情况下,更好的做法是 以便调用者知道登录是否有效(因为 login
将在出现错误时拒绝)。但是对于代码的入口点(事件处理程序之类的东西),拒绝的内联处理可以占有一席之地。这取决于如何使用 login
。除了入口点,默认让 error/rejection 传播给调用者。
this.$auth.loginWith
returns 一个承诺,但我不确定是否应该将其包装在 try/catch 中,或者只是在承诺上使用 catch
。
哪种方法正确?
Try/Catch:
async login() {
try {
const response = await this.$auth.loginWith('laravelSanctum', {
data: {
email: 'xxx',
password: 'xxx',
},
});
this.$auth.setUser(response.data.data);
} catch (e) {
}
},
捕获:
async login() {
const response = await this.$auth.loginWith('laravelSanctum', {
data: {
email: 'xxx',
password: 'xxx',
},
}).catch(function(e) {
});
this.$auth.setUser(response.data.data);
},
一般来说,最好的做法是 而不是 将 async
/await
与使用承诺方法(.then
、.catch
), 所以你的 try
/catch
通常是这两个选项中更好的一个。
和 .catch
的版本实际上会导致一个错误,因为您的特定 catch
处理程序使用 undefined
将拒绝转换为实现,因此代码在 await
之后继续,并在 response
时尝试执行 this.$auth.setUser(response.data.data);
是 undefined
,导致似乎与登录无关的新错误。
但通常情况下,更好的做法是 login
将在出现错误时拒绝)。但是对于代码的入口点(事件处理程序之类的东西),拒绝的内联处理可以占有一席之地。这取决于如何使用 login
。除了入口点,默认让 error/rejection 传播给调用者。