O API Promise mudou o jogo em JavaScript. Deixamos de abusar da setTimeout
s 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
, map
e 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!