sergey_1990
@sergey_1990
1

Как обработать ошибку в invoke Tauri + sycamore-rs?

Пытаюсь освоить Связку Tauri и sycamore-rs, споткнулся на таком моменте
#[wasm_bindgen]
extern "C" {
    #[wasm_bindgen(js_namespace = ["window", "__TAURI__", "tauri"])]
    async fn invoke(cmd: &str, args: JsValue) ->  JsValue;

    #[wasm_bindgen(js_namespace = console)]
    fn log(s: &str);
}

let greet = move |e: Event| {
        e.prevent_default();
        spawn_local_scoped(cx, async move {
            let result = invoke("run_command",
                                       to_value(&CommandArgs {  command: &command.get(),
                                           ip: &ip.get(),
                                           password: &password.get()})
                                           .unwrap()).await;
            command_msg.set(result.as_string().unwrap());
        })
    };

Этот код работает как положено, если возвращается Ok(format!("{}", a)), но Если возвращается Err(format!("Exited with status {}",e)) , то я в консоли получаю:
"Unhandled Promise Rejection: RuntimeError: Unreachable code should not be executed "
И в целом понятно почему это появляется, НО КАК это обработать по АНАЛОГИИ с JS
async function run_command() {
      let elem = document.getElementById("result")
    // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
      try {
          let ms = await invoke("run_command", { command: command(), ip:ip(), password:password()})
          setRespMsg(ms);
          elem.classList.remove("error");
          elem.classList.add("success");
      }
      catch (e) {
          setRespMsg(e);
          elem.classList.remove("success");
          elem.classList.add("error");
      }
  }

Опробованные варианты перечислять не стану их было очень много, если у кого то есть опыт в данном направлении, подскажите, буду благодарен!
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы