开发者问题收集

错误 TypeError:无法读取未定义的属性(读取‘0’)

2023-02-25
2487

这是我的代码:

function App() {

  const [input, setInput] = useState();
  const [imageURL, setImage] = useState();
  const [box, setBox] = useState({});
  

  const calculateFaceLocation = (data) => {
    const clarifaiFace = data.outputs[0].data.regions[0].region_info.bounding_box;
    const image = document.getElementById('inputImage');
    const width = Number(image.width);
    const height = Number(image.height);
    console.log(width, height);
    console.log(clarifaiFace);
  };

  const onInputChange = (event) => {
    setInput(event.target.value);
  };

  const onButtonSubmit = () => {
    setImage(input);
    console.log(input);
    const raw = JSON.stringify({
      "user_app_id": {
          "user_id": USER_ID,
          "app_id": APP_ID
      },
      "inputs": [
          {
              "data": {
                  "image": {
                      "url": input
                  }
              }
          }
      ]
  });

  const requestOptions = {
      method: 'POST',
      headers: {
          'Accept': 'application/json',
          'Authorization': 'Key ' + PAT
      },
      body: raw
  };

    fetch("https://api.clarifai.com/v2/models/" + MODEL_ID + "/outputs", requestOptions)
        // .then(response => response.json())
        .then(response => calculateFaceLocation(response.json()))
        .then(result => console.log(result))
        .catch(error => console.log('error', error));
  
  };

当我尝试 console.log(clarifaiFace) 时出现错误。控制台返回消息“错误 TypeError:无法读取未定义的属性(读取'0') at calculateFaceLocation(App.js:25:1)”

我尝试 console.log(data) 来查看对象是否未传递给 calculateFaceLocation 函数,但它似乎有效,如图所示。 ( https://i.sstatic.net/zDNQM.png ) 因此,问题是我无法访问对象中的索引。已经尝试了很多方法,但都没有用。非常感谢您的帮助!

1个回答

您的代码可能存在问题:输出可能未定义,因为 json 方法返回的是 Promise,而不是直接返回内容( https://developer.mozilla.org/en-US/docs/Web/API/Response/json )。您可以在 .json() 后链接 then() 以收集“真实”json 内容并将其提供给 calculateFaceLocation。

fetch(url, options)
  .then(res => res.json())
  .then(data => calculateFaceLocation(data))
TeIA
2023-02-25