Вполне себе работает(чуть поправил, но принципа это не меняет):
async function function2(id){
return new Promise((resolve) => document.getElementById(id).addEventListener('click', resolve, {once: true}))
}
async function doSomething(){
doSomeStuff();
await function2('button-1');
doSomeStuffAfter();
}