Gestión de errores a través de la frontera de WASM
Gestione correctamente los Results, Options y panics de Rust cuando pasan a JavaScript mediante wasm-bindgen.
Gestión de errores a través de la frontera de WASM es una lección gratuita de WebAssembly (WASM) for High Performance Apps en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de WebAssembly (WASM) for High Performance Apps, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de WebAssembly (WASM) for High Performance Apps incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
Errors Need a Bridge
Rust uses Result and Option for errors; JavaScript uses exceptions and null/undefined.
wasm-bindgen bridges these two worlds so failures surface naturally on each side.
Returning Result to JS
A Rust function returning Result<T, JsValue> becomes a JS function that either returns the value or throws.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn parse(input: &str) -> Result<i32, JsValue> {
input.parse::<i32>()
.map_err(|e| JsValue::from_str(&e.to_string()))
}Catching It in JavaScript
On the JS side, an Err arrives as a thrown exception, so wrap calls in try/catch.
try {
const n = parse('abc');
} catch (e) {
console.error('Parse failed:', e);
}Mapping Custom Errors
Convert your own error types into a JsValue so JS gets a useful message. The ? operator plus map_err keeps this clean.
#[wasm_bindgen]
pub fn divide(a: i32, b: i32) -> Result<i32, JsValue> {
if b == 0 {
return Err(JsValue::from_str('division by zero'));
}
Ok(a / b)
}Returning Option
Rust's Option<T> maps to a value or undefined in JS, perfect for nullable results.
#[wasm_bindgen]
pub fn first_char(s: &str) -> Option<char> {
s.chars().next()
}What Happens on Panic
A Rust panic in WASM aborts the module and is hard to debug, by default you get an unhelpful 'unreachable' error.
Panics should be rare; prefer Result for expected failures.
Better Panic Messages
The console_error_panic_hook crate forwards panic messages to the browser console, making debugging far easier.
#[wasm_bindgen(start)]
pub fn main() {
console_error_panic_hook::set_once();
}Result vs Panic
Choose deliberately:
- Result, expected, recoverable errors (bad input, not found)
- Panic, programmer bugs and invariants that should never break
Never use panics for normal control flow across the boundary.
Using a Custom Error Type
For richer errors, define a struct exported to JS, so JS can read fields instead of just a string.
#[wasm_bindgen]
pub struct AppError { pub code: i32 }
#[wasm_bindgen]
impl AppError {
#[wasm_bindgen(getter)]
pub fn code(&self) -> i32 { self.code }
}Propagating with ?
Inside a function returning Result<_, JsValue>, the ? operator propagates errors cleanly when types convert.
#[wasm_bindgen]
pub fn run(input: &str) -> Result<i32, JsValue> {
let n: i32 = input.parse().map_err(|_| JsValue::from_str('bad'))?;
Ok(n * 2)
}Best Practices Summary
For robust error handling:
- Return
Result<T, JsValue>so errors become JS exceptions - Return
Optionfor nullable values - Install
console_error_panic_hookfor debuggable panics - Reserve panics for true bugs, use Result for expected failures
Quick Check
How does a Rust function returning Result<T, JsValue> behave when it returns Err and is called from JavaScript?
Recap
You now handle errors cleanly across the boundary:
- Result becomes a JS throw; Option becomes value-or-undefined
- Map custom errors into JsValue
- Use console_error_panic_hook to debug panics
- Prefer Result over panic for expected failures
Clear error semantics make Rust+WASM libraries pleasant and safe to consume from JS.
Aprende WebAssembly (WASM) for High Performance Apps con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 12
- Lecciones
- 48
Preguntas frecuentes
¿La lección «Gestión de errores a través de la frontera de WASM» es gratis?
Sí — el texto completo de «Gestión de errores a través de la frontera de WASM» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de WebAssembly (WASM) for High Performance Apps, actualiza a CoddyKit PRO. El curso de WebAssembly (WASM) for High Performance Apps incluye 4 lecciones en total.
¿Qué aprenderé en «Gestión de errores a través de la frontera de WASM»?
Gestione correctamente los Results, Options y panics de Rust cuando pasan a JavaScript mediante wasm-bindgen. Practicas WebAssembly (WASM) for High Performance Apps con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar WebAssembly (WASM) for High Performance Apps?
No se requiere experiencia previa. WebAssembly (WASM) for High Performance Apps en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Gestión de errores a través de la frontera de WASM»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de WebAssembly (WASM) for High Performance Apps?
Sí. Cada lección de WebAssembly (WASM) for High Performance Apps incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Configurar Rust para WebAssembly
- Escribir funciones de Rust para WASM
- Interop eficiente entre JS y `wasm-bindgen`
- Gestión de errores a través de la frontera de WASM