Как получить данные из объекта, видимого в консоли браузера, но возвращающего значение null, когда я вручную просматриваю его в своем коде?

//listen for messages
channel.on("messageAdded", function (message) {
    //render new message    
    console.log("New awesome message", message)
    //this is null for some reason
    console.log("Stringify 3",JSON.stringify(message.state.aggregatedDeliveryReceipt))
}

Но, сохранив его как глобальный объект, щелкнув правой кнопкой мыши на консоли,  объект

Я могу сделать console.log(temp1.state.aggregatedDeliveryReceipt)

и вернуться

Состояние квитанции о доставке

Проблема в том, что когда я использую тот же state.aggregatedDeliveryReceipt в своем файле JS, я не могу получить желаемый результат. Там написано, что это null

Погуглив, я узнал, что это какой-то конструктор ...

Firebase: получение странного объекта `e` при выполнении получить

Что я пробовал:

  1. использовал JSON.stringify() на temp1

Результат: Uncaught TypeError: преобразование круговой структуры в JSON - ›начало объекта с конструктором 'l' | свойство '_fsm' - ›объект с конструктором 'o' --- свойство 'context' закрывает круг

  1. использовал это на temp1.state

Результат:

{"sid":"IMd0XXXXXXXfd8aa","index":532,"author":"XXXX","body":"XXXX","timestamp":"2020-XXXXX:12.XX","dateUpdated":"2020-11-XXXXX:12.574Z","lastUpdatedBy":null,"attributes":{},"type":"text","media":null,"participantSid":"MB0a5d2XXXXXXX27ddf4da6","aggregatedDeliveryReceipt":null}
  1. использовал его на temp1.state.aggregatedDeliveryReceipt и также возвращается null

  2. Выполняется непосредственно на консоли  log Результат: это сработало, но я не могу воспроизвести его в своем файле JS. По какой-то причине консоль может видеть это напрямую, а не через мой код


person Justine M.    schedule 02.11.2020    source источник
comment
Скорее всего, это проблема с синхронизацией, если у вас другое поведение в консоли devtools и в вашем коде. Данные вполне могут быть загружены к тому моменту, когда вы попытаетесь получить к ним доступ в консоли devtools, тогда как, скорее всего, этого не произошло, если вы слишком рано обращаетесь к ним в своем коде. В качестве первого шага используйте setTimeout(), чтобы отложить чтение кода кодом на приличное время (несколько секунд), а затем посмотреть, можно ли его правильно прочитать. Тогда вы хотя бы поймете, в чем проблема.   -  person GregL    schedule 02.11.2020
comment
Ваши предположения были верны! I Хотя я вижу, что он регистрируется (нетронутый), я не могу просмотреть квитанцию ​​о доставке ... Отложив ее на 3 секунды, я смог получить результаты сериализации. Спасибо!   -  person Justine M.    schedule 02.11.2020
comment
Мне даже не потребовалось stringify DeliveryReceipt, все, что мне нужно было сделать, это отложить чтение этого конкретного свойства объекта ... Возможно, проблема с веб-сокетом Twilio или ошибка с моей стороны. Во всяком случае, это было решено (я могу разобрать и увидеть значение). Вы хотите отправить ответ?   -  person Justine M.    schedule 02.11.2020


Ответы (1)


Скорее всего, это проблема с синхронизацией, если у вас другое поведение в консоли devtools и в вашем коде. Данные вполне могут быть загружены к тому моменту, когда вы попытаетесь получить к ним доступ в консоли devtools, тогда как, скорее всего, этого не произошло, если вы слишком рано обращаетесь к ним в своем коде.

В качестве первого шага используйте setTimeout(), чтобы отложить чтение кода кодом на приличное время (несколько секунд), а затем посмотреть, можно ли его правильно прочитать. Тогда вы хотя бы поймете, в чем проблема.

person GregL    schedule 03.11.2020