Skip to content

Commit de246b0

Browse files
chore: merge translations for introduction callbacks article
Merge pull request #133 from nildo/introduction-callbacks
2 parents 003f93b + af3e89b commit de246b0

File tree

1 file changed

+75
-75
lines changed

1 file changed

+75
-75
lines changed
Lines changed: 75 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,68 @@
11

22

3-
# Introduction: callbacks
3+
# Introdução: callbacks
44

5-
```warn header="We use browser methods in examples here"
6-
To demonstrate the use of callbacks, promises and other abstract concepts, we'll be using some browser methods: specifically, loading scripts and performing simple document manipulations.
5+
```warn header="Nós usamos métodos do navegador aqui nos exemplos"
6+
Para demonstrar o uso de callbacks, promises e outros conceitos abstratos, nós vamos usar alguns métodos do navegador: especificamente, carregar scripts e fazer manipulações simples de documentos.
77
8-
If you're not familiar with these methods, and their usage in the examples is confusing, you may want to read a few chapters from the [next part](/document) of the tutorial.
8+
Se você não está familiarizado com esses métodos, e o uso deles nos exemplos parece confuso, pode ser que você queira ler alguns capítulos da [próxima parte](/document) do tutorial.
99
10-
Although, we'll try to make things clear anyway. There won't be anything really complex browser-wise.
10+
Mas nós vamos tentar deixar as coisas claras de qualquer jeito. Não vai ter nada muito complexo em relação ao navegador.
1111
```
1212

13-
Many functions are provided by JavaScript host environments that allow you to schedule *asynchronous* actions. In other words, actions that we initiate now, but they finish later.
13+
Muitas funções providas pelo JavaScript permitem que você agende ações *assíncronas*. Em outras palavras, ações que nós iniciamos agora, mas que terminam mais tarde.
1414

15-
For instance, one such function is the `setTimeout` function.
15+
Por exemplo, uma dessas funções é a função `setTimeout`.
1616

17-
There are other real-world examples of asynchronous actions, e.g. loading scripts and modules (we'll cover them in later chapters).
17+
Existem outros exemplos práticos de ações assíncronas, por exemplo: carregar scripts e módulos (nós vamos ver nos capítulos adiante).
1818

19-
Take a look at the function `loadScript(src)`, that loads a script with the given `src`:
19+
Veja a função `loadScript(src)`, que carrega um script com um dado `src`:
2020

2121
```js
2222
function loadScript(src) {
23-
// creates a <script> tag and append it to the page
24-
// this causes the script with given src to start loading and run when complete
23+
// cria uma tag <script> e a anexa à página
24+
// isso faz com que o script com o determinado src comece a carregar e seja executado quando concluído
2525
let script = document.createElement('script');
2626
script.src = src;
2727
document.head.append(script);
2828
}
2929
```
3030

31-
It inserts into the document a new, dynamically created, tag `<script src="…">` with the given `src`. The browser automatically starts loading it and executes when complete.
31+
Ela acrescenta ao documento uma nova, dinamicamente criada, tag `<script src="…">` com o `src` passado. O navegador começa a carregar ele automaticamente e o executa quando terminar.
3232

33-
We can use this function like this:
33+
Podemos usar essa função assim:
3434

3535
```js
36-
// load and execute the script at the given path
36+
// carrega e executa o script no caminho dado
3737
loadScript('/my/script.js');
3838
```
3939

40-
The script is executed "asynchronously", as it starts loading now, but runs later, when the function has already finished.
40+
O script é executado "assincronamente", porque ele começa a carregar agora, mas executa mais tarde, quando a função já terminou.
4141

42-
If there's any code below `loadScript(…)`, it doesn't wait until the script loading finishes.
42+
Se tiver algum código abaixo de `loadScript(…)`, ele não espera até que o script termine de carregar.
4343

4444
```js
4545
loadScript('/my/script.js');
46-
// the code below loadScript
47-
// doesn't wait for the script loading to finish
46+
// o código embaixo de loadScript
47+
// não espera o carregamento do script terminar
4848
// ...
4949
```
5050

51-
Let's say we need to use the new script as soon as it loads. It declares new functions, and we want to run them.
51+
Agora, vamos imaginar que queremos usar o novo script assim que ele terminar de carregar. Ele provavelmente declara novas funções, e queremos executar elas.
5252

53-
But if we do that immediately after the `loadScript(…)` call, that wouldn't work:
53+
Mas se nós fizéssemos isso imediatamente depois da chamada `loadScript(…)`, não iria funcionar.
5454

5555
```js
56-
loadScript('/my/script.js'); // the script has "function newFunction() {…}"
56+
loadScript('/my/script.js'); // o script tem "function newFunction() {…}"
5757

5858
*!*
59-
newFunction(); // no such function!
59+
newFunction(); // a função não existe!
6060
*/!*
6161
```
6262

63-
Naturally, the browser probably didn't have time to load the script. As of now, the `loadScript` function doesn't provide a way to track the load completion. The script loads and eventually runs, that's all. But we'd like to know when it happens, to use new functions and variables from that script.
63+
Naturalmente, o navegador provavelmente não teve tempo de carregar o script. Atualmente, a função `loadScript` não oferece uma maneira de rastrear a conclusão do carregamento. O script carrega e eventualmente é executado, e isso é tudo. Mas gostaríamos de saber quando isso acontece, para usar novas funções e variáveis desse script.
6464

65-
Let's add a `callback` function as a second argument to `loadScript` that should execute when the script loads:
65+
Vamos adicionar uma função `callback` como segundo argumento em `loadScript` que deve executar quando o script terminar de carregar:
6666

6767
```js
6868
function loadScript(src, *!*callback*/!*) {
@@ -77,21 +77,21 @@ function loadScript(src, *!*callback*/!*) {
7777
}
7878
```
7979

80-
The `onload` event is described in the article <info:onload-onerror#loading-a-script>, it basically executes a function after the script is loaded and executed.
80+
O evento `onload` é descrito no artigo <info:onload-onerror#loading-a-script>, e basicamente executa uma função após o script ser carregado e executado.
8181

82-
Now if we want to call new functions from the script, we should write that in the callback:
82+
Agora se nós quisermos chamar as novas funções do script, nós podemos fazer isso no callback:
8383

8484
```js
8585
loadScript('/my/script.js', function() {
86-
// the callback runs after the script is loaded
87-
newFunction(); // so now it works
86+
// o callback executa depois que o script termina de carregar
87+
newFunction(); // então agora funciona
8888
...
8989
});
9090
```
9191

92-
That's the idea: the second argument is a function (usually anonymous) that runs when the action is completed.
92+
Esta é a ideia: o segundo argumento é uma função (normalmente anônima) que executa quando a ação termina.
9393

94-
Here's a runnable example with a real script:
94+
Veja um exemplo executável com um script real:
9595

9696
```js run
9797
function loadScript(src, callback) {
@@ -103,39 +103,39 @@ function loadScript(src, callback) {
103103

104104
*!*
105105
loadScript('https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.2.0/lodash.js', script => {
106-
alert(`Cool, the script ${script.src} is loaded`);
107-
alert( _ ); // _ is a function declared in the loaded script
106+
alert(`Legal, o script ${script.src} está carregado`);
107+
alert( _ ); // _ é a função declarada no script carregado
108108
});
109109
*/!*
110110
```
111111

112-
That's called a "callback-based" style of asynchronous programming. A function that does something asynchronously should provide a `callback` argument where we put the function to run after it's complete.
112+
Isso é chamado de programação assíncrona "baseada em callbacks". A função que faz algo assincronamente deve prover um argumento `callback` onde nós colocamos a função que vai executar depois que ela estiver completa.
113113

114-
Here we did it in `loadScript`, but of course it's a general approach.
114+
Aqui nós fizemos isso em `loadScript`, mas é claro que isso é uma abordagem genérica.
115115

116-
## Callback in callback
116+
## Callback no callback
117117

118-
How can we load two scripts sequentially: the first one, and then the second one after it?
118+
Como poderíamos carregar dois scripts sequencialmente? Carregar um primeiro, e depois o segundo?
119119

120-
The natural solution would be to put the second `loadScript` call inside the callback, like this:
120+
A solução natural seria colocar a segunda chamada de `loadScript` dentro do callback, assim:
121121

122122
```js
123123
loadScript('/my/script.js', function(script) {
124124

125-
alert(`Cool, the ${script.src} is loaded, let's load one more`);
125+
alert(`Legal, ${script.src} foi carregado, vamos carregar mais um`);
126126

127127
*!*
128128
loadScript('/my/script2.js', function(script) {
129-
alert(`Cool, the second script is loaded`);
129+
alert(`Legal, o segundo script foi carregado`);
130130
});
131131
*/!*
132132

133133
});
134134
```
135135

136-
After the outer `loadScript` is complete, the callback initiates the inner one.
136+
Depois que o `loadScript` de fora termina, o callback inicia o `loadScript` de dentro.
137137

138-
What if we want one more script...?
138+
E se nós quisermos mais um script...?
139139

140140
```js
141141
loadScript('/my/script.js', function(script) {
@@ -144,7 +144,7 @@ loadScript('/my/script.js', function(script) {
144144

145145
*!*
146146
loadScript('/my/script3.js', function(script) {
147-
// ...continue after all scripts are loaded
147+
// ...continua depois que todo os scripts forem carregados
148148
});
149149
*/!*
150150

@@ -153,13 +153,13 @@ loadScript('/my/script.js', function(script) {
153153
});
154154
```
155155

156-
So, every new action is inside a callback. That's fine for few actions, but not good for many, so we'll see other variants soon.
156+
Então, toda ação nova fica em um callback. Tudo bem para poucas ações, mas não é bom para muitas ações. Por isso nós vamos ver outras variantes em breve.
157157

158-
## Handling errors
158+
## Tratando erros
159159

160-
In the above examples we didn't consider errors. What if the script loading fails? Our callback should be able to react on that.
160+
No exemplo acima nós não consideramos erros. E se o carregamento do script falhar? Nosso callback deveria ser capaz de reagir a isso.
161161

162-
Here's an improved version of `loadScript` that tracks loading errors:
162+
Abaixo temos uma versão melhorada do `loadScript` que rastreia os erros de carregamento:
163163

164164
```js
165165
function loadScript(src, callback) {
@@ -168,39 +168,39 @@ function loadScript(src, callback) {
168168

169169
*!*
170170
script.onload = () => callback(null, script);
171-
script.onerror = () => callback(new Error(`Script load error for ${src}`));
171+
script.onerror = () => callback(new Error(`Erro no carregamento do script ${src}`));
172172
*/!*
173173

174174
document.head.append(script);
175175
}
176176
```
177177

178-
It calls `callback(null, script)` for successful load and `callback(error)` otherwise.
178+
O código acima chama `callback(null, script)` quando o carregamento é feito com sucesso e `callback(error)` caso contrário.
179179

180-
The usage:
180+
Usando a função:
181181
```js
182182
loadScript('/my/script.js', function(error, script) {
183183
if (error) {
184-
// handle error
184+
// tratar o erro
185185
} else {
186-
// script loaded successfully
186+
// script carregado com sucesso
187187
}
188188
});
189189
```
190190

191-
Once again, the recipe that we used for `loadScript` is actually quite common. It's called the "error-first callback" style.
191+
De novo, o padrão que nós usamos para o `loadScript` é bem comum. É chamado de estilo "callback com erro primeiro".
192192

193-
The convention is:
194-
1. The first argument of the `callback` is reserved for an error if it occurs. Then `callback(err)` is called.
195-
2. The second argument (and the next ones if needed) are for the successful result. Then `callback(null, result1, result2…)` is called.
193+
A convenção é:
194+
1. O primeiro argumento do `callback` é reservado para um erro, se algum ocorrer. Então `callback(err)` é chamado.
195+
2. O segundo argumento (e o próximo se for necessário) são para quando houver sucesso. Então `callback(null, result1, result2…)` é chamado.
196196

197-
So the single `callback` function is used both for reporting errors and passing back results.
197+
Assim uma única função `callback` é usada tanto para reportar erros quanto para retornar os resultados.
198198

199-
## Pyramid of Doom
199+
## Pirâmide da Perdição
200200

201-
At first glance, it looks like a viable approach to asynchronous coding. And indeed it is. For one or maybe two nested calls it looks fine.
201+
À primeira vista parece uma maneira viável de programação assíncrona. E realmente é. Para uma ou duas chamadas aninhadas está ok.
202202

203-
But for multiple asynchronous actions that follow one after another, we'll have code like this:
203+
Mas para múltiplas ações assíncronas que seguem uma depois da outra, vamos ter um código como esse:
204204

205205
```js
206206
loadScript('1.js', function(error, script) {
@@ -219,7 +219,7 @@ loadScript('1.js', function(error, script) {
219219
handleError(error);
220220
} else {
221221
*!*
222-
// ...continue after all scripts are loaded (*)
222+
// ...continua depois que todos os scripts são carregados (*)
223223
*/!*
224224
}
225225
});
@@ -230,14 +230,14 @@ loadScript('1.js', function(error, script) {
230230
});
231231
```
232232

233-
In the code above:
234-
1. We load `1.js`, then if there's no error...
235-
2. We load `2.js`, then if there's no error...
236-
3. We load `3.js`, then if there's no error -- do something else `(*)`.
233+
No código acima:
234+
1. Carregamos `1.js`, e depois, se não tiver nenhum erro...
235+
2. Carregamos `2.js`, e depois, se não tiver nenhum erro...
236+
3. Carregamos `3.js`, e depois, se não tiver nenhum erro -- faz outra coisa `(*)`.
237237

238-
As calls become more nested, the code becomes deeper and increasingly more difficult to manage, especially if we have real code instead of `...` that may include more loops, conditional statements and so on.
238+
À medida em que as chamadas ficam mais aninhadas, o código vai ficando mais profundo e cada vez mais difícil de gerenciar, especialmente se nós tivermos um código real em vez de `...`, que pode incluir mais laços, condicionais e assim por diante.
239239

240-
That's sometimes called "callback hell" or "pyramid of doom."
240+
Isso é às vezes chamado de "callback hell (inferno dos callbacks)" ou "pyramid of doom (pirâmide da perdição)."
241241

242242
<!--
243243
loadScript('1.js', function(error, script) {
@@ -265,11 +265,11 @@ loadScript('1.js', function(error, script) {
265265

266266
![](callback-hell.svg)
267267

268-
The "pyramid" of nested calls grows to the right with every asynchronous action. Soon it spirals out of control.
268+
A "pirâmide" de chamadas aninhadas cresce para a direita a cada ação assíncrona e rapidamente sai do controle.
269269

270-
So this way of coding isn't very good.
270+
Então esse jeito de programar não é muito bom.
271271

272-
We can try to alleviate the problem by making every action a standalone function, like this:
272+
Nós podemos tentar diminuir o problema fazendo cada ação ser uma função separada, assim:
273273

274274
```js
275275
loadScript('1.js', step1);
@@ -296,17 +296,17 @@ function step3(error, script) {
296296
if (error) {
297297
handleError(error);
298298
} else {
299-
// ...continue after all scripts are loaded (*)
299+
// ...continua depois que todos os scripts são carregados (*)
300300
}
301301
}
302302
```
303303

304-
See? It does the same thing, and there's no deep nesting now because we made every action a separate top-level function.
304+
Viu? Isso faz a mesma coisa, e não tem aninhamento profundo agora porque nós transformamos cada ação em uma função de nível superior separada.
305305

306-
It works, but the code looks like a torn apart spreadsheet. It's difficult to read, and you probably noticed that one needs to eye-jump between pieces while reading it. That's inconvenient, especially if the reader is not familiar with the code and doesn't know where to eye-jump.
306+
Funciona, porém, o código parece uma planilha dividida. É difícil de ler, e você provavelmente percebeu que precisamos de pular entre as partes do código enquanto estamos lendo ele. Isso é inconveniente, especialmente se o leitor não estiver familiarizado com o código e não souber para onde pular.
307307

308-
Also, the functions named `step*` are all of single use, they are created only to avoid the "pyramid of doom." No one is going to reuse them outside of the action chain. So there's a bit of namespace cluttering here.
308+
Além disso, as funções chamadas `step*` são todas utilizadas apenas uma vez. Elas são criadas apenas pra evitar a "pirâmide da perdição." Ninguém vai reutilizá-las fora da cadeia de ações. Então tem um pouco de bagunça aqui.
309309

310-
We'd like to have something better.
310+
Gostaríamos de ter algo melhor.
311311

312-
Luckily, there are other ways to avoid such pyramids. One of the best ways is to use "promises", described in the next chapter.
312+
Felizmente, existem outras maneiras de evitar essas pirâmides. Uma das melhores maneiras é usar "promises (promessas)", descritas no próximo capítulo.

0 commit comments

Comments
 (0)