You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tauri开发2048:Rust返回值引发前端JS未处理Promise拒绝

问题分析

错误提示invalid args board for command player_move: invalid type: map, expected an array of length 4的核心原因:

  • tauri.invoke()是异步函数,返回的是Promise对象而非直接的返回值
  • 你的player_move函数直接把invoke的返回值(Promise)赋值给了board变量
  • 第一次调用后,board从二维数组变成了Promise对象,后续调用后端时传入的是Promise而非预期的数组,导致类型解析失败
修复方案

修改JS代码,使用async/await处理异步调用,确保拿到后端返回的实际棋盘数组再更新board:

async function player_move() {
  // 等待invoke返回结果,拿到实际的二维数组后再赋值给board
  board = await invoke("player_move", { input: moveInputEl.value, board: board });
}

window.addEventListener("DOMContentLoaded", () => {
  moveInputEl = document.querySelector("#player-move-input");
  document.querySelector("#player-move-form").addEventListener("submit", async (e) => {
    e.preventDefault();
    await player_move();
  });
});
额外检查点
  1. 补全Rust函数的返回语句:你的player_move函数最后调用了add_number(&mut board);,但没有显式返回board,Rust会默认返回(),导致前端拿到非预期值,需补充返回:
#[tauri::command]
fn player_move(input: &str, mut board: [[i32; BOARD_SIZE]; BOARD_SIZE]) -> [[i32; BOARD_SIZE]; BOARD_SIZE] {
    // ... 原有逻辑 ...

    add_number(&mut board);
    board // 显式返回修改后的棋盘
}
  1. 确认BOARD_SIZE的值为4,和前端棋盘维度一致,避免因数组长度不匹配引发解析错误。

内容的提问来源于stack exchange,提问作者tclemment

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 07:35:18