You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:37:43