WASM Sınırında Hata Yönetimi
Rust Result'larını, Option'larını ve paniğe yol açan durumları wasm-bindgen kullanarak JavaScript'e geçerken temiz biçimde ele alın.
WASM Sınırında Hata Yönetimi, CoddyKit'te ücretsiz bir WebAssembly (WASM) for High Performance Apps dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, WebAssembly (WASM) for High Performance Apps öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. WebAssembly (WASM) for High Performance Apps kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
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.
Sıkça Sorulan Sorular
“WASM Sınırında Hata Yönetimi” dersi ücretsiz mi?
Evet — “WASM Sınırında Hata Yönetimi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve WebAssembly (WASM) for High Performance Apps kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. WebAssembly (WASM) for High Performance Apps kursu toplamda 4 dersten oluşur.
“WASM Sınırında Hata Yönetimi” dersinde ne öğreneceğim?
Rust Result'larını, Option'larını ve paniğe yol açan durumları wasm-bindgen kullanarak JavaScript'e geçerken temiz biçimde ele alın. WebAssembly (WASM) for High Performance Apps ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
WebAssembly (WASM) for High Performance Apps öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te WebAssembly (WASM) for High Performance Apps, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“WASM Sınırında Hata Yönetimi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu WebAssembly (WASM) for High Performance Apps dersinde kod yazıp çalıştırabilir miyim?
Evet. Her WebAssembly (WASM) for High Performance Apps dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Rust'ı WebAssembly için Kurma
- WASM için Rust İşlevleri Yazma
- `wasm-bindgen` ile Verimli JS Birlikte Çalışabilirliği
- WASM Sınırında Hata Yönetimi