Closed alexandre1202 closed 3 years ago
Oi @Alexandre1202! Acho que esses artigos aqui da MDN podem te dar uma visão mais ampla sobre código assíncrono no geral em JavaScript: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous
Por acaso existe alguma relação de premisse com requisição assíncrona?
Tem relação porque Promise vai te permitir executar código de forma assíncrona no JS. Mas não necessariamente uma requisição assíncrona vai acontecer apenas com o uso de Promise. Promise é um tipo de dado na linguagem que te permite lidar com código assíncrono, mas existem outras formas de fazer isso: com temporizadores, por exemplo (setTimeout e setInterval) =)
Ou absolutamente tudo no JavaScript é assíncrono?
Na verdade, é o contrário. Praticamente tudo o que você faz no JS é síncrono. Código assíncrono tem seu valor quando colocamos o JS em um ambiente específico, como no da web, por exemplo, onde várias coisas precisam acontecer ao mesmo tempo, sem que a thread principal em que o JS está rodando fique bloqueada. Dá uma lida nos artigos que passei ali em cima, que deve dar uma clareada com relação a isso :D
Por favor, o que é exatamente esse
resolve()
?
O método resolve
de Promise
retorna uma Promise
que será resolvida com aquele valor que foi passado via argumento.
Sempre que você quiser "pegar" o resultado de uma Promise
, é necessário usar o .then
.
Pense em uma Promise
como se fosse uma caixinha que contém um valor dentro. E a única forma de abrir essa caixinha é usando o método .then
, e passando uma função para o .then
.
Nessa função que você vai passar o .then
, você terá acesso ao "conteúdo da caixinha", através do argumento da função.
Você pode pensar no método .then
como se fosse similar ao método .map
de array: pensando no array como uma caixinha com vários valores, ao usar o método .map
, você passa uma função para esse método, que vai te dar, no argumento dessa função, cada um dos valores que está dentro da caixinha. Quando o .map
termina de executar, ele cria uma nova caixinha com os valores que você retornou da função passada para o .map
.
O .then
de Promise
segue a mesma ideia: sua promise é uma caixinha que contém um valor dentro. Para abrir a caixinha e conseguir pegar o valor de dentro, você usa o .then
e passa uma função, e faz o que quiser com o valor, ali dentro do .then
. No final o .then
vai te retornar uma nova Promise, ou seja: ele cria uma nova "caixinha" (nova Promise) com o conteúdo do que você retornou dentro desse .then
=)
Não é obrigatório retornar nada no .then
, mas você pode fazer, assim como no .map
, e ele vai te retornar uma nova caixinha (Promise) que poderá ser consumida novamente com outro .then
, e assim por diante =)
Deu pra entender melhor? =)
O material do MDN é surpreendente ehinnn? Junto com sua explicação ficou claro e absorvi conceitos muito bem definidos. Mas vou ler mais e rever para ter claramente. O formato de uma expressão Lambda em conjunto com uma Thread do Java é bem parecido mas são bem diferentes.
Basicamente a Promise permite eu criar uma promessa de algo a ser executado assim que algo previamente necessário terminar. Para a promessa ser cumprida o bloco .then()
executará conforme prometido e terei um resultado dentro do (resolve, reject) => {...codigo prometido...}
muito obrigado
pode fechar
Boa! Qualquer coisa, só avisar :D
Entendi que Promisse é uma operação a ser executada e terá sempre um resultado
then()
ou o encadeamento deles em caso de sucesso ou uma exception que será esse.catch()
que devolverá um erro, mas por favor, pode compartilhar alguma explicação mais detalhada sobre Promisse se tiver algo além que você já deve ter explicado em alguma issue?Por acaso existe alguma relação de premisse com requisição assíncrona?
Ou absolutamente tudo no JavaScript é assíncrono?
Por favor, o que é exatamente esse
resolve()
?@fdaciuk