I haven't tried it and surely not recommended, but I think it's possible to block execution with a while loop until the promise is resolved/rejected. This will be like a "synchronous await", which defeats the purpose of having async functions.
function syncFn() {
let result
let state = 'pending'
asyncFn()
.then(data => {
result = data
state = 'fulfilled'
})
.catch(error => {
result = error
state = 'rejected'
})
while(state==='pending') {} // Stop the world
return result
}
console.log('Result', syncFn())