Promises com JavaScript
200d atrás
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));
}
asyncOperation('Operation 1', 500).then(value => console.log(value));
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);
});
}
Se chamarmos o código abaixo:
asyncOperation('Operation 2', 1001).then(value => console.log(value)).catch(err => console.error(err));
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();
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)
]);
}
Comentários (0)