我正在用 Node.js 编写一个简单的游戏。玩家采取行动,这是作为承诺发出的。接下来检查移动的合法性:
如果合法 - 很好,执行下一个“.then”
如果不是 - 递归调用相同的函数以获得新的移动
什么有效:我设法使用“reject”+“catch”打破承诺链并递归调用该函数。
什么不起作用:当_makeMove
第二次被调用时,它应该要求玩家采取新的行动,暂停直到他们回答。实际发生的是该函数只是运行到第 3 步,而不是等待玩家的进入。
我正在通过终端输入,窗口仍然在“请输入:”,但代码已经跑掉了..(最终遇到“未定义”错误,这是很自然的,因为玩家还没有机会输入新的着法)。
代码(简化):
const _makeMove = (activePlayer) => {
//player makes a move, which is returned as a promise
activePlayer.proposeMove()
//Step 1 - check if legal
.then(proposedMove => {
if (!gameBoard.checkLegal(proposedMove)) {
return Promise.reject("bad entry");
}
return proposedMove;
})
//Step 2 - record the move
.then(proposedMove => {
activePlayer.recordMove(proposedMove);
return proposedMove;
}) //unless step 1 fails...
.catch(err => {
console.log('oops bad entry!')
//in which case let's ask the player to move again...
//by calling the function RECURSIVELY
_makeMove(activePlayer);
})
//Step 3 - game goes on...
.then(proposedMove => {
//more stuff
})
}
我完全不解。为什么递归调用没有按预期工作?
ABOUTYOU
Qyouu
收到一只叮咚
MM们
相关分类