Я пишу визуализацию нейронной сети, и я хотел бы перерисовывать ее на каждой итерации обучения, поэтому у меня есть следующая кнопка с обратным вызовом onclick:
startButton.onclick = () => {
for (let i = 0; i < trainData.length; i++) {
setTimeout(() => {
network.trainSample(trainData[i])
ctx.clearRect(0, 0, width, height)
drawNN(network)
}, 0)
}
}
Проблема в том, что если я сниму setTimeout
, он выполнит все тренировки и перерисовает все в конце.
Насколько я знаю, есть цикл обработки событий и, что делает трюк setTimeout
, он создает задание в очереди событий, которое будет выполнено не точно сейчас, а как можно скорее .
Хорошо, но если рисование на холсте асинхронно и рисование get откладывается до конца, почему его API синхронен?
Минимальный пример:
const canv = document.getElementById('myCanv')
const ctx = canv.getContext('2d')
ctx.strokeStyle = '#000000'
for (let x = 0; x <= 100; x++) {
ctx.clearRect(0, 0, 100, 100)
ctx.beginPath()
ctx.moveTo(0, 0)
ctx.lineTo(x, 100)
ctx.stroke()
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<canvas width="100" height="100" id="myCanv"></canvas>
</body>
</html>