未捕获(承诺)TypeError:

时间:2020-01-25 08:38:28

标签: javascript

我试图将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}`;
    })
}

1 个答案:

答案 0 :(得分: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循环并不意味着它们会在调用它们的函数中引起任何重复。