From 3f3c834f4bebd2680874d318925f9068fad47f1a Mon Sep 17 00:00:00 2001 From: Bruno Peselli <42525651+pzzzl@users.noreply.github.com> Date: Sun, 4 Jul 2021 18:52:14 -0300 Subject: [PT-BR] Full page revision (#1341) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [en] Full page review. Grammatical corrections and removing duplicates in english. [pt-br] Revisão completa da página. Correções gramaticais e remoção de textos duplicados em inglês. --- .../web/javascript/guide/using_promises/index.html | 52 ++++++++++------------ 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/files/pt-br/web/javascript/guide/using_promises/index.html b/files/pt-br/web/javascript/guide/using_promises/index.html index 900a15351a..fd89ea5a78 100644 --- a/files/pt-br/web/javascript/guide/using_promises/index.html +++ b/files/pt-br/web/javascript/guide/using_promises/index.html @@ -12,7 +12,7 @@ original_slug: Web/JavaScript/Guide/Usando_promises ---
{{jsSidebar("JavaScript Guide")}}{{PreviousNext("Web/JavaScript/Guide/Details_of_the_Object_Model", "Web/JavaScript/Guide/Iterators_and_Generators")}}
-

Uma {{jsxref("Promise")}} é um objeto que representa a eventual conclusão ou falha de uma operação assincrona. Como a maioria das pessoas consomem promisses já criadas, este guia explicará o consumo de promisses devolvidas antes de explicar como criá-las.

+

Uma {{jsxref("Promise")}} é um objeto que representa a eventual conclusão ou falha de uma operação assíncrona. Como a maioria das pessoas consomem promises já criadas, este guia explicará o consumo de promises devolvidas antes de explicar como criá-las.

Essencialmente, uma promise é um objeto retornado para o qual você adiciona callbacks, em vez de passar callbacks para uma função.

@@ -28,7 +28,7 @@ original_slug: Web/JavaScript/Guide/Usando_promises doSomething(successCallback, failureCallback); -

…funções modernas retornam uma promisse e então você pode adicionar seus callbacks:

+

…funções modernas retornam uma promise e então você pode adicionar seus callbacks:

const promise = doSomething();
 promise.then(successCallback, failureCallback);
@@ -37,27 +37,27 @@ promise.then
doSomething().then(successCallback, failureCallback);
-

Nós chamamos isso de chamada de função assincrona. Essa convenção tem várias vantagens. Vamos explorar cada uma delas.

+

Nós chamamos isso de chamada de função assíncrona. Essa convenção tem várias vantagens. Vamos explorar cada uma delas.

Garantias

-

Ao contrário dos callbacks com retornos de funções old-style, uma promisse vem com algumas garantias:

+

Ao contrário dos callbacks com retornos de funções old-style, uma promise vem com algumas garantias:

-

Mas o benefício mais imediato da promises é o encadeamento.

+

Mas o benefício mais imediato das promises é o encadeamento.

Encadeamento

-

Uma necessidade comum é executar duas ou mais operações assincronas consecutivas, onde cada operação subsequente começa quando a operação anterior é bem sucedida, com o resultado do passo anterior. Nós conseguimos isso criando uma cadeia de promises.

+

Uma necessidade comum é executar duas ou mais operações assíncronas consecutivas, onde cada operação subsequente começa quando a operação anterior é bem sucedida, com o resultado do passo anterior. Nós conseguimos isso criando uma cadeia de promises.

-

Aqui está a magica: a função then retorna uma nova promise, diferente da original:

+

Aqui está a mágica: a função then retorna uma nova promise, diferente da original:

const promise = doSomething();
 const promise2 = promise.then(successCallback, failureCallback);
@@ -68,11 +68,11 @@ const promise2 = promise.then(successCallback, failureCallback);
 
const promise2 = doSomething().then(successCallback, failureCallback);
 
-

Essa segunda promise representa a conclusão não apenas de doSomething(), mas também do successCallback ou failureCallback que você passou, que podem ser outras funções assincronas que retornam uma promise. Quando esse for o caso, quaisquer callbacks adicionados a promise2 serão enfileiradas atrás da promise retornada por successCallback ou failureCallback.

+

Essa segunda promise representa a conclusão não apenas de doSomething(), mas também do successCallback ou failureCallback que você passou, que podem ser outras funções assíncronas que retornam uma promise. Quando esse for o caso, quaisquer callbacks adicionados a promise2 serão enfileiradas atrás da promise retornada por successCallback ou failureCallback.

Basicamente, cada promise representa a completude de outro passo assíncrono na cadeia.

-

Antigamente, realizar operações assíncronas comuns em uma linha levaria à clássica pirâmide da desgraça :

+

Antigamente, realizar operações assíncronas comuns em uma linha levaria à clássica pirâmide da desgraça:

doSomething(function(result) {
   doSomethingElse(result, function(newResult) {
@@ -112,7 +112,7 @@ const promise2 = promise.then(successCallback, failureCallback);
 
 

Encadeando depois de um catch

-

É possivel encadear depois de uma falha, i.e um catch, isso é muito útil para realizar novas ações mesmo depois de uma falha no encadeamento. Leia o seguinte exemplo: 

+

É possivel encadear depois de uma falha, i.e um catch. Isso é muito útil para realizar novas ações mesmo depois de uma falha no encadeamento. Leia o seguinte exemplo: 

new Promise((resolve, reject) => {
     console.log('Initial');
@@ -143,7 +143,7 @@ Do this whatever happened before
 
 

Propagação de erros

-

Na pirâmide da desgraça vista anteriormente, você pode se lembrar de ter visto failureCallback três vezes, em comparação a uma única vez no fim da corrente de promessas:

+

Na pirâmide da desgraça vista anteriormente, você pode se lembrar de ter visto failureCallback três vezes, em comparação a uma única vez no fim da corrente de promises:

doSomething()
 .then(result => doSomethingElse(result))
@@ -152,7 +152,7 @@ Do this whatever happened before
 .catch(failureCallback);
 
-

Basicamente, uma corrente de promessas para se houver uma exceção, procurando por catch handlers no lugar. Essa modelagem de código segue bastante a maneira de como o código síncrono funciona:

+

Basicamente, uma corrente de promises para se houver uma exceção, procurando por catch handlers no lugar. Essa modelagem de código segue bastante a maneira de como o código síncrono funciona:

try {
   const result = syncDoSomething();
@@ -178,7 +178,7 @@ Do this whatever happened before
 }
 
-

É construído sobre promesas, por exemplo, doSomething() é a mesma função que antes. Leia mais sobre a sintaxe aqui.

+

É construído sobre promises, por exemplo, doSomething() é a mesma função que antes. Leia mais sobre a sintaxe aqui.

Por pegar todos os erros, até mesmo exceções jogadas(thrown exceptions) e erros de programação, as promises acabam por solucionar uma falha fundamental presente na pirâmide da desgraça dos callbacks. Essa característica é essencial para a composição funcional das operações assíncronas.

@@ -186,27 +186,25 @@ Do this whatever happened before

Uma {{jsxref("Promise")}} pode ser criada do zero utilizando o seu construtor. Isto deve ser necessário apenas para o envolvimento de APIs antigas.

-

Em um mundo ideal, todas as funções assincronas já retornariam promises. Infelizmente, algumas APIs ainda esperam que os retornos de suceso e/ou falha sejam passados da maneira antiga. O exemplo por excelência é o {{domxref("WindowTimers.setTimeout", "setTimeout()")}} function:

+

Em um mundo ideal, todas as funções assíncronas já retornariam promises. Infelizmente, algumas APIs ainda esperam que os retornos de sucesso e/ou falha sejam passados da maneira antiga. O exemplo por excelência é o {{domxref("WindowTimers.setTimeout", "setTimeout()")}} function:

setTimeout(() => saySomething("10 seconds passed"), 10000);
 
-

Misturar chamadas de retorno e promeses de old-style é problemático. Se saySomething falhar ou contiver um erro de programação, nada o captura.

+

Misturar chamadas de retorno e promises de old-style é problemático. Se saySomething falhar ou contiver um erro de programação, nada o captura.

-

Por sorte nós podemos envolve-la em uma promise. É uma boa prática envolver funções problemáticas no menor nivel possível, e nunca chama-las diretamente de novo:

+

Por sorte nós podemos envolvê-la em uma promise. É uma boa prática envolver funções problemáticas no menor nivel possível, e nunca chamá-las diretamente de novo:

const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
 
 wait(10000).then(() => saySomething("10 seconds")).catch(failureCallback);
 
-

Basically, the promise constructor takes an executor function that lets us resolve or reject a promise manually. Since setTimeout doesn't really fail, we left out reject in this case.

- -

Basicamente, um construtor de promises pega uma função executora que nos deixa resolver ou rejeitar uma promise manualmente. Desde que setTimeout não venha a falhar, nos deixamos a rejeição de fora nesse caso

+

Basicamente, um construtor de promises pega uma função executora que nos deixa resolver ou rejeitar uma promise manualmente. Desde que setTimeout não falhe, nós deixamos a rejeição de fora neste caso.

Composição

-

{{jsxref("Promise.resolve()")}} e {{jsxref("Promise.reject()")}} são atalhos para se criar manualmente uma promessa que já foi resolvida ou rejeitada, respectivamente. Isso pode ser útil em algumas situações.

+

{{jsxref("Promise.resolve()")}} e {{jsxref("Promise.reject()")}} são atalhos para se criar manualmente uma promise que já foi resolvida ou rejeitada, respectivamente. Isso pode ser útil em algumas situações.

{{jsxref("Promise.all()")}} e {{jsxref("Promise.race()")}} são duas ferramentas de composição para se executar operações assíncronas em paralelo.

@@ -215,7 +213,7 @@ wait(10000).then(() => saySomething("10 seconds")).catch(failureCallback);
[func1, func2].reduce((p, f) => p.then(f), Promise.resolve());
 
-

Basicamente reduzimos um vetor de funções assíncronas a uma cadeia de promessas equivalentes a: Promise.resolve().then(func1).then(func2);

+

Basicamente reduzimos um vetor de funções assíncronas a uma cadeia de promises equivalentes a: Promise.resolve().then(func1).then(func2);

Isso também pode ser feito com uma função de composição reutilizável, que é comum em programação funcional:

@@ -224,13 +222,13 @@ const composeAsync = (...funcs) => x => funcs.reduce(applyAsync, Promise.r -

A função composeAsync aceitará qualquer número de funções como argumentos e retornará uma nova função que aceita um valor incial a ser passado pelo pipeline de composição. Isso é benéfico porque alguma, ou todas as funções, podem ser assíncronas ou síncronas, e é garantido de que serão executadas na ordem correta.

+

A função composeAsync aceitará qualquer número de funções como argumentos e retornará uma nova função que aceita um valor inicial a ser passado pelo pipeline de composição. Isso é benéfico porque alguma, ou todas as funções, podem ser assíncronas ou síncronas, e é garantido de que serão executadas na ordem correta.

const transformData = composeAsync(func1, asyncFunc1, asyncFunc2, func2);
 transformData(data);
 
-

No ECMAScript 2017, uma composição sequencial pode ser feita sde forma mais simples com async/await:

+

No ECMAScript 2017, uma composição sequencial pode ser feita de forma mais simples com async/await:

for (const f of [func1, func2]) {
   await f();
@@ -239,15 +237,13 @@ transformData(data);
 
 

Cronometragem

-

Para evitar surpresas, funções passadas para then nunca serão chamadas sincronamente, mesmo com uma função ja resolvida:

+

Para evitar surpresas, funções passadas para then nunca serão chamadas sincronamente, mesmo com uma função já resolvida:

Promise.resolve().then(() => console.log(2));
 console.log(1); // 1, 2
 
-

Instead of running immediately, the passed-in function is put on a microtask queue, which means it runs later when the queue is emptied at the end of the current run of the JavaScript event loop, i.e. pretty soon:

- -

Ao invés de rodar imediatamente, a função passada é colocada em uma micro tarefa, o que significa que ela roda depois que a fila estiver vazia no final do atual processo de evento de loop do Javascript, isto é muito em breve

+

Ao invés de rodar imediatamente, a função passada é colocada em uma micro tarefa, o que significa que ela roda depois que a fila estiver vazia no final do atual processo de evento de loop do Javascript, ou seja: muito em breve:

const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
 
-- 
cgit v1.2.3-54-g00ecf