【发布时间】:2020-04-01 23:47:59
【问题描述】:
我正在尝试将一个对象数组返回给一个函数,并查看调试器,它看起来只是返回一个空数组。
这是我希望使用的功能:
// load from json file
loadData(filepath) {
let rooms = [];
fetch(filepath)
.then(
res => res.json()
)
.then(function (data) {
// console.log(data);
for (let i = 0; i < data.rooms.length; i++) {
rooms.push(data.rooms[i]);
}
});
return rooms;
}
我进入调试器,我看到 data.rooms 中的房间被推送到我的本地房间对象,但是当我回到应该使用这个房间数据的 init() 函数时:
let rooms = this.loadData(this.datapath); // TODO: make games load from json data
for (let i = 0; i < rooms.length; i++) {
this.addRoom(rooms[i].name, rooms[i].getText, rooms[i].prompts, rooms[i].requirements);
}
看起来它传递了一个空数组。是否存在范围界定问题或我遗漏了什么?我对 fetch/promises/JSON 不是很有经验。
很高兴提供任何可能有用的进一步信息。谢谢!
【问题讨论】:
-
您尝试读取的数据是在本地还是通过网络服务器?
-
您的代码将立即返回房间(最后一行)。您正在使用异步代码。 fetch 函数是异步的。它需要一些时间来完成它的工作。
-
@SarathPS 我正在从网络加载 JSON。我已确认 JSON 已成功加载。
-
@Karlan 谢谢——有没有办法让它等待 for 循环完成?
-
可以返回fetch函数。然后做 loadData.then() 或者 async/await 更容易。
标签: javascript arrays json promise return