Обещания Javascript, Возвращенное Обещание затем и метод catch - PullRequest
0 голосов
/ 29 сентября 2018

Немного дурачился с Обещаниями, вот код:

let prom1 = new Promise((res, rej) => {
  res('res');
});

const resolvedProm1 = prom1.then((val) => {
  return val
});
console.log(resolvedProm1);

let prom2 = new Promise((res, rej) => {
  rej('rej');
});

const resolvedProm2 = prom2.catch((err) => {
  return err
});
console.log(resolvedProm2);

Chrome devtools показывает следующую информацию об обещаниях:

Promises, javascript promises

Однако яне ожидал этого конкретного выхода.То, что я ожидал, было следующим:

  • И resolvedProm1, и resolvedProm2 были бы <fullfilled> Обещаниями вместо <pending>.Почему они находятся в состоянии ожидания и не заполнены?
  • resolvedProm2 был отклонен, почему promiseStatus показывает, что оно разрешено?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Обе resolvedProm1 и resolvedProm2 будут Обещаниями вместо.Почему они ожидают и не заполнены?

Поскольку они разрешаются асинхронно.Вы регистрировали их, пока они еще ожидали.Вы заметите, если вы поместите некоторые операторы console.log в ваши обратные вызовы then и catch, что обратные вызовы также еще не были выполнены.

Вы получаете только [[PromiseStatus]] как «решено» (что действительно должно быть «выполнено ») при проверке значения обещания в devtools, которое вы выполняете после онибыли решены.

resolvedProm2 было отклонено, почему обещание в StatStatus показывает, что оно разрешено?

Нет, вы отклоняли prom2.resolvedProm2 является результатом вызова .catch(), обратный вызов которого обработал отклонение и вернул результат без ошибок.

0 голосов
/ 29 сентября 2018

В обоих случаях обещания печатаются до их разрешения.То, что вы отправляете в контекст обещания, всегда будет выполняться после того, как ваш текущий стек вызовов раскрутится, поэтому консоль до конца выполнения функции сначала.

...