我有这么一段代码:
async getResultFromApi(){
let result = [];
let resp = await requestApi();
// console.log(resp.data)
for (let item of resp.data){
// console.log(item)
-> result.push(item.x.y);
}
return result;
}
这段代码,console.log 可以看到所有信息,也就是说,每一个 item 都是{ x: { y: 'hello'}},但是,箭头这一行总报错,说找不到。cannot get y of null
而且 console.log(item)实在是打印不出来任何东西。。。。。
这简直是太无法理解了
所以请教大家,到底 for loop 发生了什么,console.log 又发生了什么?为什么可以 log 出来,但仍然报错?
真是快被郁闷死了。
1
heimeil 2019-08-03 03:22:10 +08:00
console.log(typeof item);
|
2
wunonglin 2019-08-03 03:47:59 +08:00
```
let result = [] try{ let resp = await requestApi() for(const item of resp.data){ ..... } }catch ( err ){ console.log(err) } ``` err 值看看 |
3
dartabe 2019-08-03 04:05:21 +08:00
The operand of the of clause must be iterable. That means that you need a helper function if you want to iterate over plain objects
|
4
EugeneYWang 2019-08-03 04:56:46 +08:00
像楼上说的,你的 resp.data 不是 iterable
|
5
sker101 2019-08-03 05:48:14 +08:00 via iPhone
console.log(Object.assign({}, item) 试试
|
6
zqx 2019-08-03 08:25:53 +08:00 via Android
不能相信接口数据,要做个容错,这段代码把 y 去了,只 push item.x 肯定没问题
|
7
liuy1994g 2019-08-03 10:44:38 +08:00 via Android
item.x.y 着实属于高风险写法,这也是我越来越不喜欢 js 的原因
|
8
fool079 2019-08-03 10:59:31 +08:00 via Android
你可以 log 这个查看结果 Json.stringify(item)
不过一般这种情况一定要判空 比如 item && item.x && item.x.y 也可以用 lodash 的_.get 也可以用 js 新提案 不过到底还是接口的数据问题。 |
9
muzuiget 2019-08-03 14:33:26 +08:00
某个 item.x 是 null,最简单不就是“勾选出现异常时中断”吗?然后你就能查看出问题时那个 item 到时是什么。
|
10
lbunderway 2019-08-03 15:04:27 +08:00
typof item
|
11
lbunderway 2019-08-03 15:05:10 +08:00
typeof item
|