Почему объект (содержащий массив), передаваемый второй функции, выдает пустой массив, когда я пытаюсь получить доступ к его массиву? - PullRequest
0 голосов
/ 03 апреля 2020

Я получаю ответ данные . Я передаю его другой функции, а затем регистрирую. В первый раз, когда я регистрирую весь объект и получаю желаемый результат, но во второй раз, когда я пытаюсь записать массив внутри этого объекта, я получаю пустой массив. (Я перепроверил, что массив не пустой).

const f1 = () => {
  window.gapi.load('analytics', async function() {
    window.gapi.analytics.auth.authorize({
      'serverAuth': {
        'access_token': access_token
      }
    });
    const data = await new window.gapi.analytics.ViewSelector({
            container: 'view-selector-container'

    });
    data.execute();
    f2(data);
  });

}

const f2 = async function (data){
  console.log(data);
  console.log(data["zt"]["iH"]);
}

response1:

      {…}
​
Jd: Object { Lb: false, Zh: 1, Sw: 0, … }
​
Rb: Object { container: "view-selector-container" }
​
TM: Object { Lb: false, gx: false, Va: true, … }
​
hH: Object { Lb: false, gx: false, Va: true, … }
​
ids: "ga:176819049"
​
mP: Object { Lb: false, gx: false, Va: true, … }
​
zt: Object { iH: (9) […], gH: {…}, SM: {…}, … }

response2:

  []
​
length: 0
​
<prototype>: Array []

данные из console.log (data ["zt"])

​
zt: {
​​
SM: Object { "UA-xx2": {…}, "UA-xx-1": {…}, "UA-xx-1": {…}, … }
​​
gH: Object { 34199158: {…}, 44335927: {…}, 64056475: {…}, … }
​​
iH: Array(9) [ {…}, {…}, {…}, … ]
​​
r3: Object { 63179797: {…}, 77047380: {…}, 91559901: {…}, … }
​​
<prototype>: Object { fetch: fetch(), … }
​
<prototype>: Object { constructor: RE(a), execute: execute(), gt: gt(), … }
    }

, как видно из ответа выше, iH - это массив длины 9, но когда я его записываю, я получить пустой массив

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Это может быть асинхронная проблема c, когда объект данных заполняется только после того, как вы его запустили console.log. Попробуйте войти в систему console.log({...data}) или console.log(JSON.stringify(data)), чтобы убедиться, что данные есть при вызове f2.

Справочная информация: Когда вы сохраняете файл console.log (data), а затем просматриваете его в консоли, он будет содержат изменения, которые происходят даже после вызова console.log. Это потому, что данные - это объект, а вы просто регистрируете ссылку на объект, а не значение самого объекта. Вот пример: https://jsfiddle.net/michaschwab/f61tdue5/3/

0 голосов
/ 03 апреля 2020

попробуйте так console.log(data[zt]) console.log(data[iH])

или

console.log(data[zt],data[iH])

...