Javascript 在promise中使用wait/async

Javascript 在promise中使用wait/async,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,也许我问错了,因为我还不太理解async/wait 我尝试更好地使用javascript/typescript并编写一个小小的candyCrush克隆。 现在,我在一个点上的石头上面清除火柴可以下降 我的问题是,我希望石头“落下”,而不是一步到位 所以我有一个函数,它检查一些石头是否不在它们的目标位置上。 如果没有的话,我会把它们的位置放低一点,然后重新打开所有的石头 我这样做是通过一个承诺电话 如果目标上的所有石头都是,则调用 this.dropingStones(stonesWhichCan

也许我问错了,因为我还不太理解async/wait

我尝试更好地使用javascript/typescript并编写一个小小的candyCrush克隆。 现在,我在一个点上的石头上面清除火柴可以下降

我的问题是,我希望石头“落下”,而不是一步到位

所以我有一个函数,它检查一些石头是否不在它们的目标位置上。 如果没有的话,我会把它们的位置放低一点,然后重新打开所有的石头

我这样做是通过一个承诺电话

如果目标上的所有石头都是
,则调用

this.dropingStones(stonesWhichCanDrop).then((value) => {
   console.log('all is dropped')
});
dropingStones=async(dropStones)=>{
返回等待新承诺(解决=>{
//有些石头不在目标上
while(Array.from(this.stones).some(stone=>stone.posY{
stone.posY+=5;
})
}
这个。rerenderStones();
if(dropStones.every(stone=>stone.posY==stone.targetPosY)){
Array.from(this.stones.forEach(stone=>{stone.targetPosY=null})
解决(“测试”);
}
})
}
现在,我想要这个

rerenderStones

调用时承诺等待下一次执行

dropStones.forEach()…

我想我可以使用setInterval。但是现在我不知道如何停止间歇并检查是否准备就绪

有人理解我并能帮助我吗D


我用async/await阅读了这里的许多帖子,并花了数小时的时间反复尝试。但我没有成功。在这里提问是我最后的选择承诺是处理已经异步的代码的工具。目前,promise executor函数中的代码是同步的,因此它将同步解析/运行。您可以研究如何使用
setInterval()
/
setTimeout()
/
requestAnimationFrame()
,并在回调函数中移动鼠标“花了几个小时的尝试和错误”这不是您应该学习编程的方式。“在这里提问是我最后的选择”你有没有考虑过读一本关于这个话题的书?是一个列表。对于游戏开发,您还应该阅读关于我阅读文档而不是文档,我知道requestAnimationFrame(),谢谢。我用这个做了另一个游戏。但是,我希望得到有助于解决这一特殊情况的答案。
等待新的承诺
毫无意义。您创建一个包含同步代码的承诺并等待它。显然,对于承诺和异步/等待存在根本性的误解。堆栈溢出用于特定的编程问题。对这个问题的回答将在一本书中占据一章的篇幅。
dropingStones = async (dropStones) => {
        return await new Promise(resolve => {
            // some stones are not on its targets
            while(Array.from(this.stones).some(stone => stone.posY < stone.targetPosY)) {
                dropStones.forEach(stone => {
                    stone.posY += 5;
                })
            }
            this.rerenderStones();
            if(dropStones.every(stone => stone.posY == stone.targetPosY)) {
                Array.from(this.stones).forEach(stone => {stone.targetPosY = null})
                resolve('test');
            }
        })
    }