Quando vc usa o await vc transforma sua função assíncrona em uma função síncrona.

Ou seja, o await faz o programa esperar a resolução da Promise antes de continuar.

Ajustei os códigos que vc mostrou e preparei 2 exemplos para demonstrar a diferença.

EXEMPLO 1

function minhaFuncao() {
  return new Promise((resolve) => setTimeout(() => resolve("Hello"), 2000));
}

console.log(new Date(), "Início");

minhaFuncao()
  .then((result) => console.log(new Date(), result))
  .catch((error) => console.error(new Date(), error));

console.log(new Date(), "Fim");

O resultado será parecido com este:

2024-04-07T14:22:29.815Z Início
2024-04-07T14:22:29.823Z Fim
2024-04-07T14:22:31.826Z Hello

Note que "Início" e "Fim" são impresso um logo após o outro enquanto que "Hello" só aparece 2 segundos depois.

É isso que a Promisse faz, executa uma tarefa fora do fluxo normal do programa.

EXEMPLO 2

function minhaFuncao() {
  return new Promise((resolve) => setTimeout(() => resolve("Hello"), 2000));
}

console.log(new Date(), "Início");

const resultado = await minhaFuncao();
console.log(new Date(), resultado);

console.log(new Date(), "Fim");

O resultado será parecido com este:

2024-04-07T14:28:53.733Z Início
2024-04-07T14:28:55.743Z Hello
2024-04-07T14:28:55.743Z Fim

Aqui "Início" é impresso e 2 segundos depois vem "Hello" e por último "Fim".

Percebeu o que eu disse antes sobre o await esperar a resolução da Promise antes de continuar o programa?


E sobre o try/catch não tem segredo. É com essa duplinha que tratamos exceções no JavaScript.

Se vc estiver usando Promise, vc vai usar then/catch, mas quando vc usa o await, a Promise passa a se comportar como uma função síncrona e vc precisa usar try/catch para tratar possíveis erros.

Sobre quando vc deve usar cada uma, acredito que o ideal é modelar o seu programa todo de forma assíncrona pra tirar total proveito das Promise, mas pode haver situações em que isso não é possível, ou então vc sabe que a tarefa que a Promise vai realizar é tão simples e rápida que vale a pena esperar.