Promises com JavaScript

122d atrás

0 0

Promises são métodos assíncronos que podem retornar sucesso ou erro. Elas são úteis para atividades como chamadas HTTP, operações no sistema de arquivos, chamadas a API nativa ou qualquer outra operação que não tem retorno imediato.

Exemplo básico

A função #JavaScript abaixo retorna um resultado após a quantidade de ms definidas em "delay":

function asyncOperation(name, delay) {
    return new Promise(resolve => setTimeout(() => resolve(name + ' completed after ' + delay + 'ms'), delay));
}
Sua chamada pode ser feita assim:
asyncOperation('Operation 1', 500).then(value => console.log(value));
No exemplo acima, o console.log só mostrará o resultado depois de 500ms.
Operation 1 completed after 5

Lançar erro

Além do método .then(), as promises retornam o método .catch(), que captura erros lançados pela promise:

function asyncOperation(name, delay) {
    return new Promise((resolve, reject) => {
        if (delay > 1000) return reject('delay must be less than 1000ms');
    
        setTimeout(() => resolve(name + 'completed after ' + delay + 'ms'), delay);
    });
}
No exemplo acima, modificamos a função asyncOperation para rejeitar, ou seja, lançar um erro, se delay for maior que 1000.

Se chamarmos o código abaixo:

asyncOperation('Operation 2', 1001).then(value => console.log(value)).catch(err => console.error(err));
Ele não executará o código de .then(), e sim o console.error definido em .catch():
delay must be less than 1000ms

Execução sequencial

Você pode esperar a execução de uma promise usando o operador await dentro de uma async function:

async function sequentialExecution() {
    const res1 = await asyncOperation('Operation 1', 750);

    console.log(res1);
    
    const res2 = await asyncOperation('Operation 2', 500);
    
    console.log(res2);
    
    const res3 = await asyncOperation('Operation 3', 250);
    
    console.log(res3);
}

Chamando a função acima:

sequentialExecution();
Retornará os seguintes logs:
Operation 1 completed after 750ms
Operation 2 completed after 500ms
Operation 3 completed after 250ms

Execução paralela

Você pode executar várias promises ao mesmo tempo, e esperar que todas elas completem até retornar um resultado:

async function parallelExecution() {
    return await Promise.all([
        asyncOperation('Operation 1', 750),
        asyncOperation('Operation 2', 500),
        asyncOperation('Operation 3', 250)
    ]);
}
A função acima retorna uma promise que só é completada quando todas as promises internas retornam sucesso.


Comentários (0)

0/512
Link