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!