在方框消除游戏内如何实现同步行为?

需求: 做一个棋盘上是方块的消除游戏,移动方块,方块达到要求消除方块?
逻辑:方块移动(播放移动动画)=》满足消除要求(播放消除动画)=》填补方块(播放填补动画)=》满足消除要求(播放消除动画)
问题:逻辑是顺序的,但是动画是异步的;希望的是动画也是同步处理逻辑;但是实际用await 也不是同步逻辑;请问请问是否哪里有问题?
实际执行顺序为 updateBoard=>matchHandle=>removePieces=>upOffset
希望执行顺序为:updateBoard=>matchHandle=>removePieces=>dropLine=》upOffset

main()
{
await updateBoard();

    await this.upOffset();

    if (isFinish()) {

        this.result()

    } else {

        await updateBoard();

    }

}

function upOffset(){
//填补逻辑
}

export async function updateBoard() {

await updateBoardFor();

}
async function updateBoardFor() {

 await matchHandle();

let dropBool = await dropPieces();


if (!dropBool) return;

updateBoardFor();

}

async function matchHandle() {

let matchesRow = checkForMatches();

if (matchesRow >= 0) {

    await removePieces(matchesRow);

    await dropLine(matchesRow);

    matchHandle();

}

}

所以你现在这么写 会出现什么问题呢

你需要了解一下游戏状态的设计 通俗举例就是
全局逻辑根据当前状态进行,把整个游戏行为进一步拆散为更细的状态枚举,统一在update判断当前状态,从而执行对应脚本功能。而不是await A方法=>执行await B方法=> …,思路变成
update() {
switch (GameState) {
A动画状态: 该去播消除动画了
B动画状态: 该去播填补动画了
逻辑计算状态:
}
}

A(){
播放消除动画,
检测是否有填补需求, 需要填补切换至B状态,不需要填补了切换至CDEF其他状态
}

B(){
播放填补动画,
动画回调(切换至A状态) 再去重新检测消除
}

我试下状态机驱动