Canvas 如何等待画布完成重新渲染?

Canvas 如何等待画布完成重新渲染?,canvas,promise,html5-canvas,settimeout,synchronous,Canvas,Promise,Html5 Canvas,Settimeout,Synchronous,我有一个renderText()函数,它用文本填充画布(ctx.fillText(char,charLocation,400))。我希望它渲染文本,暂停2秒钟,然后渲染新文本 解决方法: renderText(); setTimeout(() => { renderNewText(); }, 2000); 这个解决方案现在还可以,但是如果我想将它减少到0.1秒,并且执行renderText()需要超过0.1秒,导致renderNext()在renderText()之前执行,该怎么

我有一个
renderText()
函数,它用文本填充画布(
ctx.fillText(char,charLocation,400)
)。我希望它渲染文本,暂停2秒钟,然后渲染新文本

解决方法:

renderText();
setTimeout(() => {
    renderNewText();
}, 2000);
这个解决方案现在还可以,但是如果我想将它减少到0.1秒,并且执行
renderText()
需要超过0.1秒,导致
renderNext()
renderText()之前执行,该怎么办?当然,我怎样才能等到
renderText()
完成
fillText
之后再暂停,不管我想暂停多长时间

我知道:我知道
canvas
context
完全同步渲染;因此,
renderText()
不会返回任何承诺,即使退出
renderText()
,在上下文中调用的所有方法也会继续。而且,至少根据我读到的所有评论和线程,没有任何事件可以在完成时发出信号。在我查阅的所有关于堆栈溢出的解决方案中,答案几乎都是“你不能”,但我发现这很难让人相信

我确信这里一定有我真正没有得到的东西,可能是事件循环或承诺或其他东西。

来自@towc's


画布api调用当然是异步的,但它们是排队的,所以 秩序得以维持。要了解更多信息,请阅读本次活动 环如果你有一个比赛条件,它在其他地方


如果
renderText
确实是
ctx.fillText(char,charLocation,400)
,那么不用担心,它是同步的,在调用renderNewText之前不可能有任何机会。canvas api调用是异步的,当然,但它们是排队的,所以顺序是保留的。要了解更多信息,请阅读事件循环。如果你有一个比赛条件,它是其他地方都可以!我想我现在了解了“同步”对JS的意义,以及排队如何使用各种命令。谢谢你让我对这件事放心!