2
respostas

Dúvida sobre Promise

Eu entendi a necessidade de utilizarmos a Promise e como tratá-la, mas não entendi alguns trechos, o que dada implementação faz por trás.

const promise = new Promise((resolve, reject) => {

        const http = new XMLHttpRequest();

        http.open('GET', 'http://localhost:3000/profile');

        http.onload = () => {
            if (http.status >= 400) {
                reject(JSON.parse(http.response))
            } else {
                resolve(JSON.parse(http.response))
            }
        }

        http.send();
    });

Exemplo: nesse caso onde temos o IF e ELSE, o que o reject vai fazer com a resposta da requisição e o que o resolve também irá fazer com isso?

2 respostas

Oi Antonia!

No exemplo da aula, como tanto o resolve quanto o reject fazem a mesma coisa, talvez o entendimento não tenha ficado tão legal mesmo.

Quando criamos uma promise, ela vai para um estado de pending e aguarda até que ela seja resolvida ou rejeitada.

Fiz o diagrama abaixo para ajudar na compreensão: Estados de uma promise

Para indicar o estado de sucesso, a promise deve chamar a função resolve e parâmetro será repassado para a função .then. Ou seja, quando a promise for resolvida, a função .then será invocada.

No caso de falha ou erro, a promise deve chamar a função reject e o parâmetro será repassado para a função .catch. Ou seja, quando a promise for rejeitada, a função .catch será invocada.

Não me lembro se durante este curso é demonstrado o uso do .catch para tratamento de erros, então entendo que haja dúvidas em relação a isso.

Espero ter ajudado! Se tiver mais alguma dúvida, pode comentar aqui!

Eduardo, ao final do curso mostrou sim o uso do try/catch onde utilizamos async/await. Posso entender então que, eu posso seguir por dois caminhos? Ou seja:

A) tratar uma promise com then / reject / resolve

B) trabalhar com a promise utilizando async/await e tratar com try/catch