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