Я очень новичок в кодировании (2 недели опыта), поэтому, пожалуйста, расскажите о моем глупом вопросе об этом коде. В конечном итоге я хочу, чтобы он постоянно запускал функцию под названием "таймер", которая говорит мне, сколько времени потребовалось для запуска функции "добавить", отобразить этот результат на моем экране и затем обновлять результаты при каждом запуске.
function add(a,b){
return a + b;
}
function timer(){
var a = Math.floor(Math.random() * 101);
var b = Math.floor(Math.random() * 101);
var start = performance.now();
add();
var end = performance.now();
var duration = end - start;
return duration + ' milliseconds';
}
t = setInterval(timer,1000);
Кажется, что это должно возвращать число "1" и ничего не делать после.
Теперь, когда я заменяю
return duration + ' milliseconds'
с
console.log(duration + ' milliseconds')
он делает то, что я хочу, за исключением того, что причина, по которой я не хочу использовать console.log, заключается в том, что она перескакивает на новую строку при отображении продолжительности вместо замены предыдущей строки на новую длительность. Чтобы уточнить, я не хочу, чтобы большой список продолжительности, который увеличивается дольше, каждый раз, когда он запускается, я показываю только одну продолжительность, которая обновляется и заменяется каждый раз, когда она запускается.
Спасибо за помощь!
Функция console.log добавляется к консоли. Поэтому вам нужно очистить консоль, чтобы достичь того, чего вы хотите.
Если вы находитесь на хроме, то вызовите
clear()
перед console.log()
в функции таймера.
Надеюсь, поможет
setInterval
является асинхронным, поэтому вы не получите возвращаемое значение таким образом. Номер, который вы возвращаете, - это идентификатор для более позднего, когда вы хотите clearInterval
.
Но позвольте сказать, весело setInterval
было попытаться вернуть значение.
Вы делаете t = setInterval(...)
но когда это происходит, ваш код внутри setInterval
еще не выполнен. Он был просто помещен в очередь в тот момент, но назначение t =...
не ждет.
возможно, это может помочь https://code.tutsplus.com/tutorials/event-based-programming-what-async-has-over-sync--net-30027
Если вы хотите получать уведомления, когда setInterval
завершен, вам может потребоваться использовать обещание:
function add(a,b) {
return a + b;
}
function timer(delayTime) {
return new Promise(
function(resolve) {
setInterval(
function() {
var a = Math.floor(Math.random() * 101);
var b = Math.floor(Math.random() * 101);
var start = performance.now();
add();
var end = performance.now();
var duration = end - start;
resolve(duration + ' milliseconds');
}, delayTime
);
}
);
}
timer(1000).then(
function(t) {
console.log(t);
}
);
Когда ты сказал
отобразить этот результат на моем экране
Я думаю, вы просто хотите обновить текст элемента. Если вы просто хотите отслеживать это, вам нужно будет использовать переменную вне функции таймера и обновить эту переменную внутри функции. Как указывали другие, setInterval
вернет идентификатор для получения интервала позже. Например, если вы хотите остановить таймер, вы должны сделать clearInterval(t);
Я создал фрагмент кода, который каждый раз обновляет продолжительность на экране:
function add(a,b){
return a + b;
}
function timer(){
var a = Math.floor(Math.random() * 101);
var b = Math.floor(Math.random() * 101);
var start = performance.now();
add();
var end = performance.now();
var duration = end - start;
document.getElementById('duration').innerHTML = duration + ' milliseconds';
}
t = setInterval(timer,1000);
Duration: <span id="duration"></span>
Кроме того, взгляните на это, поскольку вы новичок в кодировании: как вернуть ответ от асинхронного вызова?
Вы устанавливаете t
на возвращаемое значение setInterval()
В документации указано, что setInterval()
возвращает следующее:
timeoutID... числовое, ненулевое значение, которое идентифицирует таймер
Кажется, что вы действительно хотите установить переменную t
где-то внутри timer()
, так что, когда setInterval()
вызывает ее каждые 1000 мс, она обновит t.
setInterVal()
возвращаетtimeoutID
который представляет собой «числовое, ненулевое значение» developer.mozilla.org/en-US/docs/Web/API/…