Usando promisify NodeJS 8

Em:

Estava estudando as novas funcionalidades do NodeJS 8, e uma funcionalidade que pegou muitos desenvolvedores de surpresa é o promisify. O que é de fato essa feature? Ela vai “promisificar” as funções com callback, retornando uma promise? Então, resolvi criar um exemplo para explicar de que forma utilizá-la.

Primeiramente, iremos importar a biblioteca útil e já criar outra variável para usar a promisify conforme abaixo.

const util = require('util');
const promisify = util.promisify;

Agora, iremos criar uma função que recebe uma chamada de retorno conhecida como callback, na qual ela vai retornar uma tabuada.

function calcTable(num, callback)
{
    let res = [];

    if(typeof num !== 'number'){
        throw new Error('must param not is number');
    }
    
    for(var i=0; i<=10; i++){
        res.push(i*num);
    }

    callback(res);
}

Conforme o código acima, identificamos que nossa função recebe dois parâmetros: o primeiro é o numero de qual tabuada você deseja e o segundo a nossa callback. Sendo assim, precisamos prestar atenção em dois detalhes – o primeiro é que, no fim dela há o retorno desejado. O segundo detalhe é que estamos tratando um erro, ou seja, se não for um número o nosso parâmetro, ele vai indicar o erro “must param not is number”.

É possível transformar essa função em uma promessa usando o novo método do NodeJS 8, conforme código abaixo.

// It can also be that way -> calcTable = promisify(calcTable);
const myPromise = promisify(calcTable);

Bem simples. Agora, iremos testar nossa promessa que reagiu com sucesso.

myPromise(7)
.then(success => console.log(success)) // return [ 0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70 ]
.catch(fail => console.log(fail));

Percebemos que ele irá retornar a tabuada do 7, pois foi a que desejamos passando na nossa promessa.

Agora vamos supor que passamos uma string por engano, ou seja, ele vai invocar o “new Error”. Mas, como é uma promessa, ela vai retornar ao “catch”. Vejamos abaixo:

myPromise('seven')
.then(success => console.log(success))
.catch(fail => console.log(fail));
/** return
  *  Error: must param not is number
  *  at calcTable (C:\...
  */

Agora ficou bem simples encapsular suas funções para uma promessa, além de deixar o código mais legível – não irá retornar um undefined na sua chamada de retorno à famosa callback. Espero ter ajudado e contribuído com o aprendizado de vocês.

Link do código: Cliquei Aqui!

  • Iniciando com WebAssembly – Parte 2

    Esta é a segunda parte de uma série inédita de artigos sobre WebAssembly. Vamos escovar uns bits?

  • Webinar de React no YouTube Live

    A partir do dia 12 de novembro, a BrazilJS promoverá, aos sábados, das 09h às 12h, um webinar de React através do YouTube Live. O conteúdo será o desenvolvimento de apps com React e JavaScript. Para participar, você apenas precisa conhecer previamente como funciona HTML, CSS e JavaScript (ECMAScript até a versão 5.1). Se você […]

  • Fetch API e o JavaScript

    A API Fetch é mais uma API que veio para nos ajudar e facilitar certos trabalhos repetitivos. No lugar de usarmos os antigos objetos XMLHTTPRequest, podemos usar a API fetch para lidar com requisições HTTP. Promise Uma coisa muito legal é que a Fetch API segue o padrão de Promise. const URL_TO_FETCH = ‘https://braziljs.org/api/list/events’; fetch(URL_TO_FETCH, […]

Patrocinadores BrazilJS

Gold

Silver

Bronze

Apoio

BrazilJS® é uma iniciativa NASC.     Hosted by Getup