uni-app 没有异常抛出

uni-app 没有异常抛出

开发环境 版本号 项目创建方式
Windows 19042.804 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:19042.804

HBuilderX类型:Alpha

HBuilderX版本号:3.1.4

手机系统:Android

手机系统版本号:Android 10

手机厂商:OPPO

手机机型:k5

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

### 示例代码:

#### a.js
```javascript
import {B} from "./b.js"  
function A(){  
return B();  
}

b.js

export function B(p){  
return p.c++;  
}

.vue

import {A} from "a.js";  

this.data=A();

操作步骤:

在vue页面,引入一个js里的方法A.A方法 又调用B.当B执行错误时.没有异常抛出. 必须使用trycatch 才能得到异常.

预期结果:

得到一个抛出异常

实际结果:

无异常.

bug描述:

在vue页面,引入一个js里的方法A.A方法 又调用B.当B执行错误时.没有异常抛出


更多关于uni-app 没有异常抛出的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 没有异常抛出的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中,JavaScript 模块的异常处理机制遵循 ECMAScript 标准,不会自动向上层抛出跨模块的异常。当 b.js 中的函数 B 执行出错时,异常会被终止在 B 函数内部,除非在调用处显式捕获或抛出。

示例中,b.js 的 B(p) 函数试图执行 p.c++,如果参数 p 未定义或 p.c 不可递增,会抛出 TypeError。但由于 a.js 的 A() 函数直接返回 B() 的调用结果,未使用 try-catch 处理,异常会在 B 内终止,不会传递到 vue 页面。

解决方案:

  1. 在 b.js 中主动捕获并抛出异常:
export function B(p) {
  try {
    return p.c++;
  } catch (e) {
    throw new Error(`B函数执行错误: ${e.message}`);
  }
}
  1. 或在 a.js 中处理异常:
import {B} from "./b.js"
function A() {
  try {
    return B();
  } catch (e) {
    console.error("A中捕获异常:", e);
    throw e; // 重新抛出供上层处理
  }
}
  1. 在 vue 页面中调用时使用 try-catch:
try {
  this.data = A();
} catch (e) {
  console.error("页面捕获异常:", e);
}
回到顶部