我试图将一个对象数组返回给一个函数,查看调试器,它看起来只是返回一个空数组。
下面是我希望使用的函数:
// 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不是很有经验。
很乐意提供任何可能有用的进一步信息。谢谢!
发布于 2019-12-09 04:03:23
问题是,您的本地变量房间将在异步获取完成之前返回。
您可以简单地等待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);发布于 2019-12-09 04:20:37
试试这个,如果不起作用,请让我知道。
// 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();https://stackoverflow.com/questions/59239308
复制相似问题