对象内的对象数组

时间:2018-04-16 13:45:08

标签: javascript

我尝试在父对象中获取一组对象。 在xmlHttpRequest之前创建父对象,然后在我的对象中填充my xmlHttpRequest的结果。这在我的对象中创建了一个结果数组(子对象数组)

的console.log(OBJ):

Object [...]
  0: Array [{...}, {...}, {...}, ...]
    0: Object {id: "1", name: "application1", version: "1.0", ...}
    1: Object {id: "2", name: "application2", version: "1.0", ...}
    2: Object {id: "3", name: "application3", version: "1.0", ...}
    ...

问题在于我无法读取我的孩子对象

的console.log(OBJ [0]):

Array []
  length: 0
  __proto__: Array []

但我希望得到这个:

Array [{...}, {...}, ...]
  0: Object {id: "1", name: "application1", version: "1.0", ...}
  1: Object {id: "2", name: "application2", version: "1.0", ...}
  2: Object {id: "3", name: "application3", version: "1.0", ...}
  ...

我的代码详情:

var res = {0:[]};
var Carmin = new CarminClient(url)

Carmin.listPipelines(function (data) {
        res[0] = data;
    });

console.log(res); // Filled
console.log(res[0]); // Empty

我希望有人可以帮助我:)。

1 个答案:

答案 0 :(得分:0)

这是因为您的xmlHttpRequest是异步的。

当您的初始console.log(res)出现时,它就是"填充"因为它有一个键0),其值为[]。此外,如果您在google开发工具中查看此内容,可以在事后填写。

如果您将其更改为

var res = {0:[]};
var Carmin = new CarminClient(url)

Carmin.listPipelines(function (data) {
        res[0] = data;

        console.log(res[0]); // <---
    });

您将看到您的数据。

您传递给Carmin.listPipelines的功能称为callback,是您有权访问数据时将运行的功能。在调用此函数之前,您无法对数据执行任何其他操作。

使用较新的Javascript版本,您可以将代码转换为async / await,例如:

async function myFunction () {
  var Carmin = new CarminClient(url);
  var data = await Carmin.listPipelines();
  console.log(data);
}

这使您可以编写异步&#34;同步查找&#34;代码