【问题标题】:Processing an Object During Fetch Returns 'undefined'在获取期间处理对象返回“未定义”
【发布时间】:2020-01-30 15:44:02
【问题描述】:

我正在获取狗的 API,它返回一个对象。 我想在转换之前对对象进行更改 它到一个数组和 setState() 它。 问题是它返回“未定义”。 我认为该功能没问题,因为如果我在 fetch 之外运行它确实可以工作,或者我在这里遗漏了什么?

componentDidMount() {
    fetch("https://dog.ceo/api/breeds/list/all")
      (res => res.json())
      .then(res => res.message)
      .then(res => this.processReq(res)) // <--- undefined
      .then(res => Object.entries(res))
      .then(res => this.setState({ allBreeds: res }));
  }

  processReq = breed =>
    Object.keys(breed).forEach(key => {
      if (key === "australian") {
        breed["shepherd"] = [key];
        delete breed[key];
      } else if (key === "germanshepherd") {
        breed["shepherd"].push("german");
        delete breed[key];
      }
    });

有没有办法在获取期间操作对象? 或者将它设置为数组然后处理它会更容易?

【问题讨论】:

  • 那你为什么用这么多?
  • 有什么更好的方法?

标签: javascript reactjs


【解决方案1】:

实际上forEach 函数没有返回任何东西,所以它给出了undefined,你应该把它改成:

processReq = breed => {
    Object.keys(breed).forEach(key => {
      if (key === "australian") {
        breed["shepherd"] = [key];
        delete breed[key];
      } else if (key === "germanshepherd") {
        breed["shepherd"].push("german");
        delete breed[key];
      }
    });
    return breed;
}

【讨论】:

  • 好的...谢谢!
【解决方案2】:

processReq 函数没有返回语句,所以它只返回undefined。只需在其末尾加上return breed; 即可。

【讨论】:

  • 是的。谢谢...!
  • 没问题。祝你的项目好运!
  • 不对,是隐式返回的箭头函数,只不过@9​​87654324@的返回值为undefined。
  • 不怕——.then() 中的回调调用 processReq 函数并返回未定义的结果。
  • 嗯,你是对的!可以发誓他们刚才就在那里!将纠正我的答案。
猜你喜欢
  • 2017-07-08
  • 1970-01-01
  • 2011-03-27
  • 2016-01-30
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多