首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >loadData()返回空数组

loadData()返回空数组
EN

Stack Overflow用户
提问于 2019-12-09 03:50:57
回答 2查看 111关注 0票数 0

我试图将一个对象数组返回给一个函数,查看调试器,它看起来只是返回一个空数组。

下面是我希望使用的函数:

代码语言:javascript
复制
// 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()函数时,它应该使用这个房间数据:

代码语言:javascript
复制
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不是很有经验。

很乐意提供任何可能有用的进一步信息。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-12-09 04:03:23

问题是,您的本地变量房间将在异步获取完成之前返回。

您可以简单地等待fetch语句,并使函数异步:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-12-09 04:20:37

试试这个,如果不起作用,请让我知道。

代码语言:javascript
复制
// 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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59239308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档