Skip to content

Error handling with promises - #467

Merged
gabifs merged 2 commits into
javascript-tutorial:masterfrom
diogoosz:translate-promise-error-handling
Nov 8, 2026
Merged

gabifs merged 2 commits into
javascript-tutorial:masterfrom
diogoosz:translate-promise-error-handling

Conversation

@diogoosz

@diogoosz diogoosz commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

Tradução do artigo "Error handling with promises" para o português, incluindo o exercício.

Conforme comentado na #1.

.then(() => {
// successful promise handlers, one or more
}); // without .catch at the end!
// tratadores de promessa bem-sucedidos, um ou mais

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mudança de sentido: successful promise handlers aqui quer dizer tratadores de sucesso (os passados ao .then), não tratadores que "tiveram sucesso". "tratadores de promessa bem-sucedidos" muda o sentido e destoa do termo usado no resto do artigo ("tratador .then de sucesso", linhas 103/117/120).

Suggested change
// tratadores de promessa bem-sucedidos, um ou mais
// tratadores de sucesso da promessa, um ou mais

## try..catch implícito

The code of a promise executor and promise handlers has an "invisible `try..catch`" around it. If an exception happens, it gets caught and treated as a rejection.
O código de um executor de promessa e dos tratadores de promessa tem um "try..catch invisível" ao redor dele. Se uma exceção acontece, ela é capturada e tratada como uma rejeição.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Formatação de código perdida: o original é "invisible `try..catch`", com try..catch como código inline. A tradução removeu as crases, então try..catch aparece como texto comum. O mesmo acontece na linha 67 e em 01-error-async/solution.md linha 11. O resto do artigo (linhas 99, 101, 171) mantém try..catch como código.

Suggested change
O código de um executor de promessa e dos tratadores de promessa tem um "try..catch invisível" ao redor dele. Se uma exceção acontece, ela é capturada e tratada como uma rejeição.
O código de um executor de promessa e dos tratadores de promessa tem um "`try..catch` invisível" ao redor dele. Se uma exceção acontece, ela é capturada e tratada como uma rejeição.

```

The "invisible `try..catch`" around the executor automatically catches the error and turns it into rejected promise.
O "try..catch invisível" ao redor do executor captura o erro automaticamente e o transforma em uma promessa rejeitada.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mesmo problema da linha 45: as crases ao redor de try..catch foram removidas.

Suggested change
O "try..catch invisível" ao redor do executor captura o erro automaticamente e o transforma em uma promessa rejeitada.
O "`try..catch` invisível" ao redor do executor captura o erro automaticamente e o transforma em uma promessa rejeitada.

```

As said in the chapter, there's an "implicit `try..catch`" around the function code. So all synchronous errors are handled.
Como dito no capítulo, existe um "try..catch implícito" ao redor do código da função. Então todos os erros síncronos são tratados.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O original é "implicit `try..catch`"; as crases ao redor de try..catch foram removidas na tradução.

Suggested change
Como dito no capítulo, existe um "try..catch implícito" ao redor do código da função. Então todos os erros síncronos são tratados.
Como dito no capítulo, existe um "`try..catch` implícito" ao redor do código da função. Então todos os erros síncronos são tratados.

- O `.then` também captura erros da mesma forma, se receber o segundo argumento (que é o tratador de erro).
- Devemos colocar o `.catch` exatamente nos lugares onde queremos tratar erros e sabemos como tratá-los. O tratador deve analisar os erros (classes de erro personalizadas ajudam) e relançar os desconhecidos (talvez sejam erros de programação).
- Não tem problema não usar `.catch` de jeito nenhum, se não houver como se recuperar de um erro.
- Em qualquer caso, devemos ter o tratador do evento `unhandledrejection` (para navegadores, e equivalentes para outros ambientes) para rastrear erros não tratados e informar o usuário (e provavelmente nosso servidor) sobre eles, para que nosso app nunca "simplesmente morra".

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CLAUDE.md: "avoid using foreign words: Words like timer, loop, inline should be avoided." app é um anglicismo; "aplicação" funciona aqui.

Suggested change
- Em qualquer caso, devemos ter o tratador do evento `unhandledrejection` (para navegadores, e equivalentes para outros ambientes) para rastrear erros não tratados e informar o usuário (e provavelmente nosso servidor) sobre eles, para que nosso app nunca "simplesmente morra".
- Em qualquer caso, devemos ter o tratador do evento `unhandledrejection` (para navegadores, e equivalentes para outros ambientes) para rastrear erros não tratados e informar o usuário (e provavelmente nosso servidor) sobre eles, para que nossa aplicação nunca "simplesmente morra".

Em um `try..catch` normal, podemos analisar o erro e talvez relançá-lo se não puder ser tratado. A mesma coisa é possível com promessas.

If we `throw` inside `.catch`, then the control goes to the next closest error handler. And if we handle the error and finish normally, then it continues to the next closest successful `.then` handler.
Se dermos um `throw` dentro do `.catch`, o controle vai para o próximo tratador de erro mais próximo. E se tratarmos o erro e terminarmos normalmente, então ele continua para o próximo tratador `.then` de sucesso mais próximo.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Redundância: "o próximo tratador de erro mais próximo" repete a ideia (tradução literal de "next closest"). Basta "o tratador de erro mais próximo", como na linha 69.

Suggested change
Se dermos um `throw` dentro do `.catch`, o controle vai para o próximo tratador de erro mais próximo. E se tratarmos o erro e terminarmos normalmente, então ele continua para o próximo tratador `.then` de sucesso mais próximo.
Se dermos um `throw` dentro do `.catch`, o controle vai para o tratador de erro mais próximo. E se tratarmos o erro e terminarmos normalmente, então ele continua para o tratador `.then` de sucesso mais próximo.


if (error instanceof URIError) {
// handle it
// trata isso

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: // handle it é imperativo (um marcador de "faça o tratamento aqui"). "trata isso" fica no indicativo e soa estranho; algo como "trate o erro aqui" fica mais natural.

Suggested change
// trata isso
// trate o erro aqui

@diogoosz

diogoosz commented Nov 8, 2026

Copy link
Copy Markdown
Contributor Author

Obrigado, @gabifs! Apliquei tudo: corrigi o sentido de "successful promise handlers" (tratadores de sucesso, não tratadores bem-sucedidos), devolvi as crases em try..catch nos três lugares, removi a redundância "próximo... mais próximo", traduzi o comentário imperativo "// handle it", e troquei "app" por "aplicação".

@gabifs
gabifs merged commit 46f93f7 into javascript-tutorial:master Nov 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants