Формат вывода промиса на консоль

При выводе промиса на консоль он показывается примерно так:

˅ Promise {<fulfilled>: 42}
    ˃ __proto__: Promise
    [[PromiseState]]: "fulfilled"
    [[PromiseResult]]: 42

Эти [[PromiseState]] и [[PromiseResult]] показываются на уровне объекта, а не прототипа, однако:

  • они не являются его свойствами
  • они не являются символами (там при выводе нельзя избавиться от слова Symbol)
  • они не являются приватными полями (при выводе нет решётки)
  • они в отличие от всего перечисленного показываются после __proto__, а не до

скриншот

Я понимаю, что это некие внутренние поля, принадлежащие инстансу промиса, но тем не менее мне интересно, как же они реализованы и почему это вызывает столь необычное отображение? А ещё, возможно ли создать свой собственный объект, который будет выводиться аналогичным образом?


Ответы (1 шт):

Автор решения: Arturas Lapinskas

Некоторые встроенные методы, написаны не на javascript, поэтому могут выглядеть необычно, или вы вообще не сможете посмотреть реализацию в консоли. И конечно, можно написать свою реализацию promise, это есть во многих туториалах по javascript.

→ Ссылка