我尝试在父对象中获取一组对象。 在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
我希望有人可以帮助我:)。
答案 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;代码