Element-UI中Promise执行异常:res为undefined且进入catch的问题
问题分析与解决方案
核心问题:API请求函数未返回Promise
你的reqDeleteTradeMark函数内部调用了封装的request方法,但没有返回这个请求生成的Promise对象。函数默认返回undefined,这直接导致await this.$API.trademark.reqDeleteTradeMark(row.id)得到的结果是undefined。
为什么会进入catch分支?
当你尝试访问res.code时,res是undefined,会抛出Cannot read properties of undefined (reading 'code')的错误。由于$confirm的.then回调是async函数,内部未捕获的错误会被外层的.catch捕获,因此触发了“已取消删除”的提示,删除后的成功逻辑也无法执行。
修复代码
只需要给reqDeleteTradeMark函数添加return,返回请求的Promise:
export const reqDeleteTradeMark=(id)=>{ // 加上return,返回request生成的Promise return request({url:`/api/admin/product/baseTrademark/remove/${id}`,method:'delete'}) }
额外优化建议
为了区分“用户取消确认”和“请求/逻辑出错”两种场景,建议在async回调内添加try/catch,避免错误混淆:
deleteTradeMark(row) { this.$confirm(`此操作将永久删除${row.tmName}, 是否继续?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(async () => { try { let res = await this.$API.trademark.reqDeleteTradeMark(row.id) console.log(res) if(res.code===200){ this.$message({ type: 'success', message: '删除成功!' }); this.getTradeMark(this.list.length>1?this.page:this.page-1) } } catch (err) { this.$message({ type: 'error', message: '删除失败,请重试!' }); } }).catch(() => { this.$message({ type: 'info', message: '已取消删除' }); }); }
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

