Кнопка выполняет функцию «разрешить» и отпускает ожидание, как и ожидалось.
Но затем клавиша ENTER также отменяет ожидание. Что происходит?
<html>
<head>
<title> Q:await </title>
<meta charset = "utf-8">
<script>
"use strict";
let fnresolve, n=0; // globals
window.onload = function() {
zlog('Hit the button, then the ENTER key');
zlog();
Main();
}
async function Main() {
do {
zlog('before wait', ++n);
let pMain = new Promise((res) => { fnresolve = res; } ); // save the res function
await pMain;
zlog('after wait', n); zlog('');
} while (1);
}
function zlog() {
document.getElementById('zlog').innerHTML += (Object.values(arguments).join(', ')) + '<br />';
}
</script>
</head>
<body>
<button onclick='fnresolve();'> fnresolve </button>
<div id='zlog'></div>
</body>
</html>
Обновлено: Ответ и комментарии вдохновили на исправление:
<button onclick='fnresolve();this.blur();'> fnresolve </button>
<button>
элемент. В типичном HTML-документе нажатие клавиши "ENTER"
может активировать первую кнопку на странице, как если бы она была нажата. Поскольку ваша функция fnresolve
связана с событием onclick
кнопки, нажатие "ENTER"
запускает это событие, вызывая выполнение обещания.
Вот что вам следует обновить
<button type = "button" onclick='fnresolve();'> fnresolve </button>
хаха, извини, мне пришлось сходить в туалет...
Однако здесь нет формы. Вероятно, это просто элемент кнопки, имеющий фокус.
Я попробовал принять - пришлось ждать минут 15.
@Пойнти, на месте! вы всегда будете думать о формах, когда увидите кнопки...
«Тип» не помог, но это помогло: <button onclick='fnresolve();this.blur();'> fnresolve </button>
Должен ли я обновить соответствующим образом, или вы можете отредактировать ответ, если можете, @dcromley?
Что заняло у тебя так много времени? 7 минут! Спасибо.