O API Promise mudou o jogo em JavaScript. Deixamos de abusar da setTimeouts e de nos contentarmos com operações síncronas para fazer todo o possível para aproveitar essa nova API assíncrona. Vamos dar uma olhada em alguns truques incríveis da API Promise!
Um problema do qual nos queixamos imediatamente com as promessas foi o fato de não podermos cancelá-las. Um simples promiseInstance.cancel() teria sido excelente, mas nunca apareceu. Em vez disso, recebemos uma API que era muito mais complicada:
const controller = new AbortController();
const { signal } = controller;
fetch("http://localhost:8000", { signal }).then(response => {
console.log(`Request 1 is complete!`);
}).catch(e => {
console.warn(`Fetch 1 error: ${e.message}`);
});
// Abort request
controller.abort();
A mágica aqui é fornecer o signal com cada fetch solicitação. No mundo do JavaScript, herdamos APIs difíceis e fazemos maravilhas para abstraí-las e, portanto, encontraremos uma maneira de abstrair melhor essa API.
Esperar por uma duração é útil em muitas situações de produção e teste – nunca é o ideal, mas sempre é útil. Usei duas funções incríveis para melhorar minha vida:
/* Wait for milliseconds */
function waitForTime(ms) {
return new Promise(r => setTimeout(r, ms));
}
/* Usage */
await waitForTime(200);
/* Wait Forever */
function waitForever() {
return new Promise(r => {});
}
// Usage:
await waitForever();
Não espere por situações perfeitas, espere pelo tempo que o senhor precisa.
Funções de matriz assíncrona
Funções de matriz como forEach, mape outras funções são usadas com frequência sem a necessidade de serem síncronas. Não pensamos nisso, mas há um bom número de vezes em que podemos usar assíncrono em nossas operações.
const promises = [1, 2, 3].map(async (num) => {
console.log(num);
});
await promises;
A diferença entre assíncrono e síncrono é a seguinte Promise.allSettled. Use assíncrono quando puder!
O senhor sabia que pode adicionar arbitrariamente um then em objetos para que eles sejam tratados como uma Promessa?
j = { then: resolve => fetch("/").then(resolve) }
j.then(res => console.log(res));
// Response {type: "basic", url: "https://davidwalsh.name/", redirected: false, status: 200, ok: true, …}
// ... or an await...
const response = await j;
// Response {type: "basic", url: "https://davidwalsh.name/", redirected: false, status: 200, ok: true, …}
Agora o senhor sabe! Um excelente truque que a maioria não conhece!
Não é algo que o senhor precise fazer com frequência, mas esta publicação é sobre truques, certo? Se quiser detectar uma função assíncrona, o senhor sempre pode:
async function myFunction() {
}
const isAsync = myFunction.constructor.name === "AsyncFunction";
As Promessas em JavaScript são algo que usamos todos os dias, mas um olhar mais amplo sobre elas nos permite inovar! O senhor tem algum truque de Promise? Compartilhe!