我试图将对象数组返回给函数,然后看着调试器,看起来它只是返回一个空数组。
这是我希望使用的功能:
// 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的房间被推送到我的本地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不太了解。
很乐意提供任何可能有用的进一步信息。谢谢!
答案 0 :(得分:1)
问题是您的本地变量室将在异步获取完成之前返回。
您可以简单地等待fetch语句并使函数异步:
async loadData(filepath) {
let rooms = [];
const response = await fetch(filepath);
const data = await response.json();
console.log(data);
for (let i = 0; i < data.rooms.length; i++) {
rooms.push(data.rooms[i]);
}
return rooms;
}
let rooms = await this.loadData(this.datapath);
答案 1 :(得分:0)
尝试一下,如果没有成功,请告诉我。
// load from json file
async function call() {
const loadData = async filepath => {
let rooms = [];
return await fetch(filepath)
.then(res => res.json())
.then(async data => {
rooms = await [...data];
return rooms;
});
};
let x = await loadData("https://jsonplaceholder.typicode.com/posts");
console.log("TEST: ", x);
}
call();