A clean an simple way to do this is with Promises, and using async / await.
Basically make your button click into a promise resolver that your wait function can pass.
Example below.
let waitForPressResolve;
function waitForPress() {
return new Promise(resolve => waitForPressResolve = resolve);
}
const btn = document.querySelector('button');
function btnResolver() {
if (waitForPressResolve) waitForPressResolve();
}
async function doIt() {
btn.addEventListener('click', btnResolver);
for (let c = 1; c < 10; c += 1) {
console.log(c);
await waitForPress();
}
btn.removeEventListener('click', btnResolver);
console.log('Finished');
}
doIt();
<button>Do Next</button>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…