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(); }); });
额外检查点
- 补全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 // 显式返回修改后的棋盘 }
- 确认
BOARD_SIZE的值为4,和前端棋盘维度一致,避免因数组长度不匹配引发解析错误。
内容的提问来源于stack exchange,提问作者tclemment
相关产品推荐
相关产品推荐

