У меня проблемы с пониманием 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, красный цвет errors hello world
становится черным в момент времени 5 секунд с текстом , затем новое сообщение об ошибке в момент времени 6 секунд errors 2 hello world
, затем красное сообщение об ошибке в момент времени 7 секунд. Теперь я очень озадачен тем, сколько раз reject
действительно вызывается .... Я потерян ...
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });
может быть более идиоматически и кратко написано какvar p = Promise.reject(Error("hello world"));
:-)