Я пытаюсь сделать функцию сна в Javascript.
Функция drawLinesToHtmlCanvas()
предназначена для рисования случайных линий на холсте HTML, а пользователь должен видеть Линии рисуются в реальном времени.
Для этого примера я использую задержку в 500 мс, но хотел бы иметь возможность от go до 1 мс (или даже в будущем разрешение менее 1 мс)
Первоначально я следовал за ответом из этого поста: Что такое JavaScript версия sleep ()?
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function drawLinesToHtmlCanvas() {
// Get canvas and context here...
var drawSpeed = 500; // ms.
for (i=0; i<lines; i++) {
// Draw lines to canvas...
await sleep(drawSpeed);
}
}
И это сработало очень хорошо (см. Выше). Это было эффективно, совсем не замедляло работу браузера и позволяло мне контролировать время.
Проблема заключалась в том, что setTimeout()
не может показывать go с точностью до 1 мс, и это то, что я требуется для этой функции.
Поэтому вместо этого я попробовал свой собственный подход следующим образом:
function sleep(ms) {
ms = parseInt(ms);
var now = new Date();
nowMs = now.valueOf();
var endMs = nowMs + ms;
while (endMs > nowMs) {
nowMs = new Date().valueOf();
}
return true;
}
function drawLinesToHtmlCanvas() {
// Get canvas and context here...
var drawSpeed = 500; // ms.
for (i=0; i<lines; i++) {
// Draw lines to canvas...
while (!sleep(drawSpeed));
}
}
Этот метод очень медленный, в то время как l oop, ожидающий нужного времени, израсходует все ресурсы браузера, это совершенно непригодно для использования. Кроме того, во время работы функции drawLinesToHtmlCanvas()
строки не обновляются до элемента canvas.
Решение с обещанием setTimeout()
было fantasti c, оно просто недостаточно точно для моего требования.
Могу ли я дать обещание, которое работает аналогично первому примеру? Но вместо использования setTimeout()
он использует алгоритм, аналогичный моему Date()
, теперь по сравнению с окончанием мс сравнения, так как это было бы гораздо более точным?
Линии должны быть в состоянии быть сокращены до 1 мс пока у вас есть обновления в реальном времени, пользователь должен видеть линии, нарисованные на холсте.