JavaScript只是渲染套壳,所有业务异常在Rust-WASM内部处理完毕,不向JavaScript传递。
// ✅ 正确
#[wasm_bindgen]
pub fn handle_click() {
match business_logic() {
Ok(result) => { let _ = JS_FNS.set_data_obj("result", Some(&result)); }
Err(e) => { let _ = JS_FNS.alert(&format!("失败: {}", e)); }
}
}
// ❌ 错误
#[wasm_bindgen]
pub fn handle_click() -> Result<(), JsValue> {
business_logic()?; // 错误会传到JavaScript
Ok(())
}
// 第三方错误转换
external_lib::call()
.map_err(|e| CatError::new_with(format!("外部错误: {}", e), -5000))?;
// JS_FNS已处理JavaScript异常
JS_FNS.set_data_str("key", "value")?; // 内部已转CatError
match api_call().await {
Ok(data) => { let _ = JS_FNS.set_data_obj("data", Some(&data)); }
Err(e) => {
let _ = JS_FNS.alert(&format!("操作失败: {}", e));
let _ = JS_FNS.set_data_str("error", &e.to_string());
}
}
// ✅ 安全访问
let value = vec.get(index).ok_or(CatError::new("索引越界"))?;
// ❌ 风险代码
let value = vec[index]; // 可能panic
制定:林栖(cat07)
日期:2026-02-23
参考:《Rust (Actix-web) 编码规范 V2.0》
返回