У мене виникають проблеми з розумінням 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
оброблені таким чином , по- різному з точки зору , коли вони викликаються?
ДОПОМОГА
Я також написав цей код:
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
насправді викликають .... я загублений ...
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });
можна більш ідіоматично і стисло записати якvar p = Promise.reject(Error("hello world"));
:-)