J'ai du mal à comprendre javaScript promises
. J'ai écrit le code suivant:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log(e)),5000);
Je vois immédiatement cela dans ma console développeur Chrome:
Mais après avoir attendu 5 secondes, le message passe automatiquement au noir comme cette image:
Je n'ai jamais vu ce comportement auparavant entre mon code javaScript et une console de développeur, où mon code javaScript peut "modifier le contenu existant" dans la console de développeur.
J'ai donc décidé de voir si la même situation se produit resolve
en écrivant ce code:
var p = new Promise(function(resolve,reject){
resolve("hello world");
});
setTimeout(()=>p.then(e=>console.log(e)),5000);
Mais dans cette situation, ma console de développeur n'affiche rien avant 5 secondes plus tard, sur laquelle elle s'imprime ensuite hello world
.
Pourquoi les resolve
et sont-ils reject
traités si différemment en termes de moment où ils sont invoqués?
SUPPLÉMENTAIRE
J'ai également écrit ce code:
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);
Cela provoque plusieurs sorties vers la console du développeur. Erreur rouge au temps 0, le rouge devient noir au temps 5 secondes avec le texte errors hello world
, puis un nouveau message d'erreur au temps 6 secondes errors 2 hello world
, puis un message d'erreur rouge au temps 7 secondes. Maintenant, je suis très confus sur le nombre de fois où un est reject
effectivement invoqué ... Je suis perdu ...
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });
peut être écrit de manière plus idiomatique et concisevar p = Promise.reject(Error("hello world"));
:-)