Estou tendo problemas para entender o javaScript promises
. Eu escrevi o seguinte código:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log(e)),5000);
Vejo isso imediatamente no meu console do desenvolvedor Chrome:
Mas depois de esperar 5 segundos, a mensagem muda automaticamente para preto como esta imagem:
Nunca vi esse comportamento antes entre meu código javaScript e um console do desenvolvedor, onde meu código javaScript pode "modificar o conteúdo existente" no console do desenvolvedor.
Então eu decidi ver se a mesma situação ocorre resolve
escrevendo este código:
var p = new Promise(function(resolve,reject){
resolve("hello world");
});
setTimeout(()=>p.then(e=>console.log(e)),5000);
Mas nessa situação, meu console do desenvolvedor não mostra nada até 5 segundos depois, para o qual é impresso hello world
.
Por que o resolve
e reject
tratadas de modo diferente em termos de quando eles são chamados?
EXTRA
Eu também escrevi este código:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log("errors",e)),5000);
setTimeout(()=>p.catch(e=>console.log("errors 2",e)),6000);
setTimeout(()=>p.catch(null),7000);
Isso causa várias saídas para o console do desenvolvedor. Erro vermelho no tempo 0, vermelho muda para preto no tempo 5 segundos com o texto errors hello world
, uma nova mensagem de erro no tempo 6 segundos errors 2 hello world
e uma mensagem de erro vermelha no tempo 7 segundos. Agora estou muito confuso sobre quantas vezes uma pessoa reject
é realmente chamada ... Estou perdida ...
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });
pode ser mais idiomaticamente e concisa escrito comovar p = Promise.reject(Error("hello world"));
:-)