未捕获(承诺)TypeError:

问题描述 投票:0回答:1

我正在尝试将0-99之间的数字添加到myData函数中,以便它一键即可打印所有用户。但是我遇到了错误。

错误:index.js:14未捕获(承诺)TypeError:无法读取未定义的属性'userId'在index.js:14

function number() {
    for (let i = 0; i < 100; i++) {
        i;
    }
}

const myData = () =>  {
    fetch('https://jsonplaceholder.typicode.com/posts?fbclid=IwAR2aHkMfSVPYV3va38MKu-jOahl9G8UzyPJ1Dd67EyskMPZMw1gN9xi-AUg')
    .then(response => {
        return response.json();
    })
    .then(users => {
        document.getElementById('demo').innerHTML += `
        User ID: ${users[number()].userId}<Br> 
        ID: ${users[number()].id}<br> 
        Title: ${users[number()].title}<Br>
        Desc: ${users[number()].body}`;
    })
}

javascript
1个回答
2
投票

尚不清楚您希望number()功能会做什么。当您在问题中遇到问题时,它将运行for循环,然后以返回值undefined退出函数。加return i将使其返回零并立即退出循环。

如果您打算将demo ID的innerHTML设置为具有所有用户,那么您需要在循环中进行如下操作:

.then(users => {
  let allUsersHtml = "";
  for (let i=0; i<users.length; i++) {
    allUsersHtml += `
    User ID: ${users[i].userId}<br> 
    ID: ${users[i].id}<br> 
    Title: ${users[i].title}<br>
    Desc: ${users[i].body}`;
  }
  document.getElementById('demo').innerHTML = allUsersHtml;
})

这假定返回的users数据是Array对象。

您第一次尝试的主要问题是了解功能的运行方式。他们每次被调用只能返回一件事。仅仅因为它们包括一个for循环并不意味着它们会在调用它们的函数中引起任何重复。

© www.soinside.com 2019 - 2024. All rights reserved.