/* 这段代码是一个JavaScript模块,用于与Web Worker进行通信。Web Worker可以在后台线程中执行代码,使得主线程(通常是UI线程)不会因为复杂的或者耗时的任务而被阻塞。 在这个例子中,Web Worker 负责执行一个名为 MinmaxWorker 的任务,可能是一个实现了极小化极大算法(Minimax Algorithm)的工作线程,它通常用于棋类游戏中的人工智能决策。 该模块提供了四个函数:start, move, end, 和 undo, 每个函数都通过 worker.postMessage 发送一个包含 action 和其他必要信息的对象给Worker。 Worker接收这些信息后将执行相应的AI计算任务,完成后通过 worker.onmessage 将结果信息传回给主线程。 每个函数返回一个Promise对象,这意味着它们都是异步的,可以在未来的某个时间点解决(resolve)或拒绝(reject)。 主线程在接收到信息后,通过 resolve 方法将Promise对象的状态改为已解决,并返回结果数据,从而可以在异步函数中使用 await 表达式获取这些数据。 */ // bridge.js: 从当前目录下的'minmax.worker'文件导入MinmaxWorker类 import MinmaxWorker from './minmax.worker'; // 创建MinmaxWorker的实例 const worker = new MinmaxWorker(); // `start` 函数,异步初始化游戏,传入棋盘大小、AI是否先手和搜索深度 export const start = async (board_size, aiFirst, depth) => { // 返回一个新的Promise对象 return new Promise((resolve, reject) => { // 向worker发送初始化游戏的消息 worker.postMessage({ action: 'start', payload: { board_size, // 棋盘大小 aiFirst, // AI是否先手 depth // 搜索深度 }, }); // 当worker发送消息回来时触发 worker.onmessage = (event) => { // 从事件中解构出action和payload const { action, payload } = event.data; // 如果action是'start',则解决(resolve)这个promise if (action === 'start') { resolve(payload); } }; }) }; // `move` 函数,异步执行一个移动,传入移动的位置和搜索深度 export const move = async (position, depth) => { // 返回一个新的Promise对象 return new Promise((resolve, reject) => { // 向worker发送执行移动的消息 worker.postMessage({ action: 'move', payload: { position, // 移动的位置 depth // 搜索深度 }, }); // 当worker发送消息回来时触发 worker.onmessage = (event) => { // 从事件中解构出action和payload const { action, payload } = event.data; // 如果action是'move',则解决(resolve)这个promise if (action === 'move') { resolve(payload); } }; }) }; // `end` 函数,异步结束游戏 export const end = async () => { // 返回一个新的Promise对象 return new Promise((resolve, reject) => { // 向worker发送结束游戏的消息 worker.postMessage({ action: 'end', }); // 当worker发送消息回来时触发 worker.onmessage = (event) => { // 从事件中解构出action和payload const { action, payload } = event.data; // 如果action是'end',则解决(resolve)这个promise if (action === 'end') { resolve(payload); } }; }) }; // `undo` 函数,异步执行撤销上一步操作 export const undo = async () => { // 返回一个新的Promise对象 return new Promise((resolve, reject) => { // 向worker发送撤销上一步操作的消息 worker.postMessage({ action: 'undo', }); // 当worker发送消息回来时触发 worker.onmessage = (event) => { // 打印接收到的撤销操作相关的信息 console.log('undo', event); // 从事件中解构出action和payload const { action, payload } = event.data; // 如果action是'undo',则解决(resolve)这个promise if (action === 'undo') { resolve(payload); } }; }) };