У меня проблемы с пониманием javaScript promises
. Я написал следующий код:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log(e)),5000);
Я сразу же вижу это в консоли разработчика Chrome:
Но через 5 секунд сообщение автоматическименяется на черный, как показано на этом изображении:
Я никогда раньше не видел такого поведения между моим кодом javaScript и консолью разработчика, где мой код javaScript может «изменять существующее содержимое» вконсоль разработчика.
Поэтому я решил посмотреть, возникает ли такая же ситуация с resolve
, написав этот код:
var p = new Promise(function(resolve,reject){
resolve("hello world");
});
setTimeout(()=>p.then(e=>console.log(e)),5000);
Но в этой ситуации моя консоль разработчика не отображаетсячто-нибудь до 5 секунд спустя, на которое он затем печатает hello world
.
Почему resolve
и reject
обрабатываются так по-разному с точки зрения времени их вызова?
EXTRA
Я также написал этот код:
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);
Это приводит к нескольким выводам на консоль разработчика. Ошибка красного цвета в момент времени 0, красный цвет становится черным в момент времени 5 секунд с текстом errors hello world
, затем новое сообщение об ошибке в момент времени 6 секунд errors 2 hello world
, затем красное сообщение об ошибке в момент времени 7 секунд. Теперь я очень озадачен тем, сколько раз на самом деле вызывается reject
.... Я потерян ...