mirror of
https://github.com/google/comprehensive-rust.git
synced 2025-05-23 19:00:13 +02:00
error-handling.md
This commit is contained in:
parent
7d411b7237
commit
4f8bc9061f
@ -301,6 +301,7 @@
|
||||
- [Import Method](webassembly/import-method.md)
|
||||
- [web-sys](webassembly/web-sys.md)
|
||||
- [Expose a method](webassembly/expose-method.md)
|
||||
- [Error handling](webassembly/error-handling.md)
|
||||
- [Expose user-defined Rust types](webassembly/expose-rust-type.md)
|
||||
- [Borrow Checker](webassembly/borrow-checker.md)
|
||||
|
||||
|
54
src/webassembly/error-handling.md
Normal file
54
src/webassembly/error-handling.md
Normal file
@ -0,0 +1,54 @@
|
||||
# Error handling
|
||||
|
||||
`Result<T, E>` is translated to javascript errors. Methods directly exposed and called from Javascript that return a `Result`
|
||||
will automatically throw an error if the variant of the return value is `Result::Err`. `E` has to implement `Into<JsValue>`.
|
||||
|
||||
```rust
|
||||
#[wasm_bindgen]
|
||||
pub fn str_to_int(s: &str) -> Option<i32, JsValue> {
|
||||
s.parse::<i32>()
|
||||
.map_err(|_| JsValue::from_str("Failed to parse string"))
|
||||
}
|
||||
```
|
||||
|
||||
`Option` is converted to `undefined` in case of `None`.
|
||||
|
||||
```rust
|
||||
#[wasm_bindgen]
|
||||
pub fn str_to_int(s: &str) -> Option<i32> {
|
||||
s.parse::<i32>().ok()
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
Javascript (click on the wasm output box) to parse the string:
|
||||
|
||||
```javascript
|
||||
import init, {set_panic_hook, str_to_int} from '/wasm/project.js';
|
||||
|
||||
|
||||
(async () => {
|
||||
// Run the init method to initiate the WebAssembly module.
|
||||
await init();
|
||||
set_panic_hook();
|
||||
const wasmoutput = document.querySelector('#wasmoutput');
|
||||
const input = document.createElement('input');
|
||||
input.type = 'text';
|
||||
document.body.appendChild(input);
|
||||
wasmoutput.onclick = () => {
|
||||
try {
|
||||
wasmoutput.innerHTML = str_to_int(input.value);
|
||||
} catch (e) {
|
||||
wasmoutput.innerHTML = e;
|
||||
}
|
||||
};
|
||||
})();
|
||||
```
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
* Click on the wasm output box to see the output
|
||||
* `?` and other error handling toos also work
|
||||
|
||||
</details>
|
Loading…
x
Reference in New Issue
Block a user