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 传播给调用者。