Tengo problemas para entender javaScript promises. Escribí el siguiente código:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log(e)),5000);
Inmediatamente veo esto en mi consola de desarrollador de Chrome:

Pero después de esperar 5 segundos, el mensaje cambia automáticamente a negro como esta imagen:

Nunca antes había visto este comportamiento entre mi código javaScript y una consola de desarrollador, donde mi código javaScript puede "modificar el contenido existente" en la consola de desarrollador.
Así que decidí ver si ocurre la misma situación resolveescribiendo este código:
var p = new Promise(function(resolve,reject){
resolve("hello world");
});
setTimeout(()=>p.then(e=>console.log(e)),5000);
Pero en esta situación, mi consola de desarrollador no muestra nada hasta 5 segundos después, a lo que luego imprime hello world .
¿Por qué las resolvey rejecttratada de manera diferente en términos de cuando se invocan?
EXTRA
También escribí 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);
Esto provoca varias salidas a la consola del desarrollador. Error rojo en el tiempo 0, rojo cambia a negro en el tiempo 5 segundos con el texto errors hello world, luego un nuevo mensaje de error en el tiempo 6 segundos errors 2 hello world, luego un mensaje de error rojo en el tiempo 7 segundos. Ahora estoy muy confundido acerca de cuántas veces rejectse invoca realmente ... Estoy perdido ...
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });puede escribirse de manera más idiomática y concisa comovar p = Promise.reject(Error("hello world"));:-)