javascript 错误类型错误:此.userList不可迭代

gywdnpxw  于 2023-11-15  发布在  Java
关注(0)|答案(3)|浏览(101)

我一直在寻找类似的问题,但不明白我的问题是什么。
我正在调用service.getUsers()。并成功获取数据。但我在调试代码时注意到this.userListundefined(如图所示)。我的问题是我无法识别userList,它显示为ERROR TypeError: this.userList is not iterable
但是在HTML中,我使用userList作为表的资源。我可以看到我从DB中获取的数据。那么,如果数据未定义且不可迭代,我如何看到这些数据呢?我需要在同一个类中使用userList for循环。


的数据

this.service.getUsers().subscribe(data => { this.userList = data; });

testFunction() {
  for (let user of this.userList) {
    this.selectedUserList.push(user);
  }
}

字符串

7vhp5slm

7vhp5slm1#

谢谢大家我想出来了

this.service.getUsers().subscribe(data=>{this.userList=data; console.log(data); this.testFunction();});

字符串
我在订阅中调用的函数工作正常。

dzhpxtsq

dzhpxtsq2#

如果你在订阅数据后调用testFunction(),那么你将不会得到这个.userList作为undefined。但否则你会得到。
这是因为getUsers()返回一个observable(因为你订阅了它),而observable是异步的。所以当getUsers()完成执行并返回数据时,该控件已经到达了testFunction()。由于前一个函数还没有返回,变量this.userList肯定是未定义的。

this.service.getUsers().subscribe(data => {
  this.userList = data;
  this.testFunction();
});

testFunction() {
  for (let user of this.userList) {
    this.selectedUserList.push(user);
  }
}

字符串

yhuiod9q

yhuiod9q3#

如果你在React中工作,有时你会得到这个错误,因为你想把来自服务器数据数组保存在useState变量中,然后你用useState变量在前端显示数据。
示例问题:

const {
    data: timetable_record,
    isLoading,
    isError,
  } = useQuery("timetable", () => apiMiddleware("admin/timetable/timetable"));

  const [timetable, setTimetable] = useState(timetable_record);

字符串
所以当你使用时间表变量显示数据时,你会得到迭代错误。
解决方法:

const {
    data: timetable_record,
    isLoading,
    isError,
  } = useQuery("timetable", () => apiMiddleware("admin/timetable/timetable"));

  console.log(timetable_record);

  const [timetable, setTimetable] = useState([]);

 useEffect(() => {
    if (timetable_record) {
      setTimetable(timetable_record);
    }
  }, [timetable_record]);


通过这样做,useEffect函数在加载后有数据时将数据分配给useState变量。

相关问题