Які речі всередині [[]]
Моє питання полягає в тому, що означають подвійні дужки [[]], і як я отримую значення [[PromiseValue]].
Це внутрішня властивість. Ви не можете отримати до нього безпосередній доступ. Власні обіцянки можуть розгортатися лише then
з обіцянками або взагалі асинхронно - див. Як повернути відповідь з асинхронного дзвінка . Цитування специфікації:
Вони визначаються цією специфікацією виключно для ознайомчих цілей. Реалізація ECMAScript повинна вести себе так, ніби вона створює та працює на внутрішніх властивостях, як описано тут. Назви внутрішніх властивостей укладені у подвійні квадратні дужки [[]] . Коли алгоритм використовує внутрішню властивість об'єкта, а об'єкт не реалізує вказану внутрішню властивість, виникає виняток TypeError.
Ти не можеш
Хоча серйозно - які вони?
Дуже мило! Як зазначено у наведеній вище цитаті, вони просто використовуються в специфікації - тому немає жодної причини для того, щоб вони дійсно з’являлися у вашій консолі.
Не кажіть нікому, але це справді приватні символи . Причиною їх існування є доступ до інших внутрішніх методів [[PromiseValue]]
. Наприклад, коли io.js вирішує повернути обіцянки замість зворотних викликів - це дозволить йому швидко отримати доступ до цих властивостей, якщо це гарантовано. Вони не піддаються впливу зовні.
Чи можу я отримати до них доступ?
Якщо ви не зробите власну версію Chrome або V8. Можливо, у ES7 з модифікаторами доступу. На сьогоднішній день немає жодного способу, оскільки вони не є частиною специфікації, і вони будуть розбиватися в браузерах - вибачте.
То як я можу отримати свою вартість?
getDefinitions().then(function(defs){
});
Але що, якщо він повертає помилку? Напередодні цих випадків додайте наступне в кінці (та поза) вашого .then ().
.catch(function(defs){
});
Хоча, якби мені довелося здогадуватися - для початку ви не перетворюєте API правильно, оскільки це перетворення буде працювати лише в тому випадку, якщо метод синхронний (у такому випадку не повертайте обіцянку) або він повертає обіцянку, яка вже зробить це вирішено (що означає, що перетворення вам зовсім не потрібне - просто return
.