No contexto de javascript não é exatamente quando vai ser finalizado, mas se vai ser finalizado ao mesmo tempo que você precisa fazer outras coisas, o exemplo de cartas não representa bem a questão, um exemplo melhor:
Imagine um consultório médico ou enfermagem
O profissional identifica o paciente e busca o prontuário (seja sistema, pedir pra alguém buscar, desafixar no leito... Não importa) (async)
Enquanto o prontuário não chega ele vai fazendo a tal anamnese que é perguntar pro paciente o que ele está sentindo (sync)
Terminou a anamnese? Verifica se o prontuário chegou (scheduler de microtask interno do javascript)
Agora ele colhe dados vitais do paciente, frequência respiratória, cardíaca, pressão... (sync)
Terminou? Verifica se o prontuário chegou (scheduler de microtask interno do javascript)
Se o prontuário tiver chegado ele registra os dados, lê o prontuário e faz a prescrição (sync)
Prontuário não chegou? Aguarda (await)
Prontuário ainda não existe? Cria o prontuário (catch)
E aguarda os farmacêuticos (await) liberarem a medicação e depois a equipe técnica preparar e aplicar a medicação (sync)
Então async/promisses em JS é mais sobre pegar algo necessário apenas no final que sobre quando esse algo será finalizado