Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript obj有时是未定义的,而在其他时候工作得很好_Javascript_Vue.js - Fatal编程技术网

Javascript obj有时是未定义的,而在其他时候工作得很好

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: [],

在computed Property中,我试图将从API接收的ID与同样从API接收的ID键的对象数组相匹配,并从匹配的ID对象检索名称键

obj变量偶尔会抛出obj为未定义错误,但并不一致

我认为这与ID是异步的有关。将函数从arrow更改为classic函数,以避免弄乱此范围

  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,但我怎么没有想到要这样做。完美修复!谢谢