Mam problem ze zrozumieniem javaScript promises. Napisałem następujący kod:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log(e)),5000);
Od razu widzę to w mojej konsoli programisty Chrome:

Ale po odczekaniu 5 sekund wiadomość automatycznie zmienia kolor na czarny, jak na tym obrazku:

Nigdy wcześniej nie widziałem takiego zachowania między moim kodem javaScript a konsolą programisty, gdzie mój kod javaScript może „modyfikować istniejącą zawartość” w konsoli programisty.
Postanowiłem więc sprawdzić, czy występuje taka sama sytuacja resolve, pisząc ten kod:
var p = new Promise(function(resolve,reject){
resolve("hello world");
});
setTimeout(()=>p.then(e=>console.log(e)),5000);
Ale w tej sytuacji moja konsola programisty nie pokazuje niczego, aż 5 sekund później, a następnie drukuje hello world.
Dlaczego są tak traktowane resolvei rejecttraktowane w różny sposób, gdy są wywoływane?
DODATKOWY
Napisałem również ten kod:
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);
Powoduje to kilka wyników w konsoli programisty. Czerwony błąd w czasie 0, czerwony zmienia się na czarny w czasie 5 sekund z tekstem errors hello world, następnie nowy komunikat o błędzie w czasie 6 sekund errors 2 hello world, a następnie czerwony komunikat o błędzie w czasie 7 sekund. Teraz jestem bardzo zdezorientowany, ile razy rejectfaktycznie wywoływane ... Jestem zagubiony ...
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });można bardziej idiomatycznie i zwięźle napisać jakovar p = Promise.reject(Error("hello world"));:-)