JS is async... First principles