Конечно можете. После await у вас должен идти промис, который будет ресолвиться из обработчика события. Если речь о событиях DOM, то как-то так:
HTMLElement.prototype.waitFor = function(event_name) {
if (event_name) {
return new Promise((res, rej) => {
const listener = function() {
res()
this.removeEventListener(event_name, listener)
};
this.addEventListener(event_name, listener);
})
} else {
throw 'No event passed to waitFor method!';
}
}
async function foo() {
const start = new Date();
await document.querySelector('body').waitFor('click');
console.log('uspeshno dojdalis clicka, jdali celih ' + ((new Date().getTime() - start.getTime())/1000) + ' sekund');
}
foo();