Javascript obj有时是未定义的,而在其他时候工作得很好
在computed Property中,我试图将从API接收的ID与同样从API接收的ID键的对象数组相匹配,并从匹配的ID对象检索名称键 obj变量偶尔会抛出obj为未定义错误,但并不一致 我认为这与ID是异步的有关。将函数从arrow更改为classic函数,以避免弄乱此范围Javascript obj有时是未定义的,而在其他时候工作得很好,javascript,vue.js,Javascript,Vue.js,在computed Property中,我试图将从API接收的ID与同样从API接收的ID键的对象数组相匹配,并从匹配的ID对象检索名称键 obj变量偶尔会抛出obj为未定义错误,但并不一致 我认为这与ID是异步的有关。将函数从arrow更改为classic函数,以避免弄乱此范围 data() { return { upComing: [], popular: [], topRated: [], playingNow: [],
data() {
return {
upComing: [],
popular: [],
topRated: [],
playingNow: [],
details: [],
genres: []
}
},
computed: {
genre: function() {
let list = this.upComing[0] ? this.upComing[0].genre_ids[0] : 0
let obj = this.genres.find(function(o) {
return o.id === list
})
return obj.name
}
},
created() {
let self = this
APIService.getUpcoming()
.then(response => {
self.upComing = response.data.results
//console.log(this.upComing)
})
.catch(error => {
console.log(`There was an error: ${error.response}`)
}),
APIService.getGenres()
.then(response => {
this.genres = response.data.genres
//console.log(this.genres)
})
.catch(error => {
console.log(`There was an error: ${error.response}`)
})
}
}
我得到这个TypeError:obj未定义,这个[Vue warn]:render中的错误:TypeError:obj未定义
它会把每个人扔两次。因此,我在控制台中有4个错误,但只有这2个错误,延迟1秒。关于异步问题,你很可能是对的,难道你不能通过这样做来防止未定义的错误吗:
let obj = this.genres.find(function(o) {
return o.id === list
}) || { name: 'defaultName'}
计算:{
类型:功能{
let list=this.comming[0]?this.comming[0]。流派ID[0]:0
让obj=this.genres.findfunctiono{
返回o.id==列表
}
返回obj?obj.name://或默认值
}
},
错误是this.genres为[],因此在装入组件时计算computed属性,因此this.genres.find的结果。。。。未定义,因为它在空列表中找不到内容
您可以使用如下| |符号获得默认值:
let obj = this.genres.find(function(o) {
return o.id === list
}) || { name: 'defaultName'}
这意味着,如果在“流派”列表中找不到任何内容,您仍然有一个默认结果,那么您可以返回obj.name,而不会出现错误
还要注意的是,genres变量是空的,因为在您的承诺得到解决之前,computed方法是tun,并且在您更新该变量之后,它会再次运行,尽管已经使用ternary,但我怎么没有想到要这样做。完美修复!谢谢