Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
September 10, 2021 01:21 pm GMT

Async/await ainda pode te surpreender... MUITO!

Eu amo tecnologia , e o fato de que no importa o quanto voc saiba ainda vai existir algo para te supreender. Algum tempo atras, um amigo meu (@Rafael_Toscano) me mostrou algo e minha reao automtica foi mais ou menos assim:

Cat Surprised

Ele compartilhou comigo um artigo do blog da V8 sobre "Faster async functions and promises." e entre vrias coisas interessantes, uma particular capturou minha ateno de uma forma que na hora eu pensei "Isso no pode ser real, vou ter que testar."

Era sobre o comportamento do async/await e como podem ser usados com qualquer funo que seja considerada "thenable". O que isso significa? Qualquer objeto que tenha um mtodo then() pode ser usado com async/await

No artigo ele da o seguinte exemplo:

class Sleep {  constructor(timeout) {    this.timeout = timeout;  }  then(resolve, reject) {    const startTime = Date.now();    setTimeout(() => resolve(Date.now() - startTime),               this.timeout);  }}(async () => {  const actualTime = await new Sleep(1000);  console.log(actualTime);})();

Mother Of God

Yeaaah, por favor me diz que no fui s eu que ficou to surpreso.

Acho que ajuda a gente a entender um pouco mais sobre como async/await funciona e as possibilidades das coisas que podemos fazer fazer. Mas como diria tio Ben, isso tudo vem com grandes responsabilidades tambm, no vai sair colocando objetos com then no projeto s para parecer fodo

Voc provavelmente nunca vai precisar de usar async/await dessa forma direta e se voc encontrar um caso de uso para isso por favor compartilha com a gente. Um caso que eu considerei foi para implementar algo chamado "retry strategy", segue o exemplo:

const ServerMock = {  count: 0,  getData() {    if (this.count === 2) {      return Promise.resolve([{ name: "SomeName" }]);    } else {      this.count++;      return Promise.reject("Error");    }  }};function fetchData(limit, time) {  return {    then(resolve, reject) {      const retry = setInterval(async () => {        limit--;        try {          console.log("Trying....");          const data = await ServerMock.getData();          if (data) {            console.log("Resolve");            clearInterval(retry);            resolve(data);          }        } catch {          if (limit === 0) {            clearInterval(retry);            reject("Limit Reached");          }        }      }, time);    }  };}(async () => {  try {    const result = await fetchData(3, 1000);    console.log(result);  } catch (err) {    console.log(err);  }})();

Me diz o que voc achou sobre essa nova descoberta nos comentrios...


Original Link: https://dev.to/assuncaocharles/async-await-ainda-pode-te-surpreender-muito-4nj7

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To