Как достать значение из JSON

195
08 февраля 2020, 00:40
Promise {<resolved>: Array(3)}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: Array(3)
0: {msg1: "Hello world"}
1: {msg2: "Hello world1"}
2: {msg3: "Hello world2"}
length: 3
__proto__: Array(0)

Нужно достать вот эти msg. Пытался через точку получить и через квадратные скобки, ничего не получается

Answer 1

Ваш объект - это обещание (промис, Promise), настоящее значение спрятано у него внутри слота [[PromiseValue]]. Доступа к этому слоту напрямую нет, выцепить его можно только двумя способами.

Способ первый - метод .then:

v.then(data => {
    console.log(data[0].msg1);
    console.log(data[1].msg2);
    console.log(data[2].msg3);
})

Способ второй - через await внутри асинхронного метода:

data = await v;
console.log(data[0].msg1);
console.log(data[1].msg2);
console.log(data[2].msg3);

Но не пытайтесь "обмануть" систему и вытащить значение раньше чем следует! Обещание - это абстракция значения, которого ещё не существует, но оно будет доступно когда-то в будущем. Именно поэтому и не существует способа "достать" из него значение прямо сейчас.

Если вы попытаетесь сделать как-то вот так:

let result;
v.then(data => result = data); // не делайте так!
console.log(result);

то вы обнаружите, что ничего не получилось, переменная result осталась неопределенной.

Почему так получается можно увидеть, если посмотреть на порядок выполнения программы:

let result; // 1
v.then(data => {
    result = data; // 4
}) // 2
console.log(result); // 3

Сначала выполняется 1, потом выполняется вызов then (но переданная функция ещё не была вызвана!), наконец выполняется 3 и т.д. И только много позже, когда наступит какое-то внешнее событие, а управление вернется очереди событий, будет выполнена строка 4.

READ ALSO
css анимация и three.js

css анимация и three.js

На странице используется графика построенная с использованием threejs, пока графика строится хотел использовать прелоадер на css (крутилка, вертелка)

224
Как выполнить JavaScript через определенное время?

Как выполнить JavaScript через определенное время?

Нужно через 5 секунд после загрузки страницы выполнить javascript файл, который находиться на удаленном сервере, и доступен по ссылке:

203
VUE: динамический import компонента из $route.params

VUE: динамический import компонента из $route.params

Товарищи vue spa строители! Столкнулся с проблемой следующего содержания: мне необходимо динамически подгружать на страницу компонент имя...

224