按钮执行“解决”功能并释放等待,正如预期的那样。
但随后 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>
元素。在典型的 HTML 文档中,按 "ENTER"
键可以触发页面上的第一个按钮,就像单击一样。由于您的 fnresolve
函数与按钮的 onclick
事件相关联,因此按 "ENTER"
会触发此事件,从而解决承诺。
<button type="button" onclick='fnresolve();'> fnresolve </button>