getPlat({"tenantId":row.id}).then(response=>{ console.log(response.rows.length) if(response.total>0){ this.$set(this.form2,"platAddr",response.rows[0].platAddr) this.$set(this.form2,"platDesc",response.rows[0].platDesc) this.$set(this.form2,"platDomain",response.rows[0].platDomain) this.$set(this.form2,"platLogo",response.rows[0].platLogo) this.$set(this.form2,"platName",response.rows[0].platName) this.$set(this.form2,"id",response.rows[0].id) }else{ console.log("未设置平台") }
返回的数据结构如下:
{"total":0,"rows":[],"code":200,"msg":"查询成功"}
如上述代码加了IF判断,但是在浏览器中还是报错。
Uncaught (in promise) TypeError: response.rows[0] is undefined handlePlant index.vue:401 promise callback*handlePlant index.vue:400 click index.vue:350 VueJS 4 handleClick element-ui.common.js:9457
怎么阻止?
handlePlant index.vue:401
是不是你这边的业务代码位置?
点一下后面的 index.vue:401
就会在 devTools
中定位到异常处了,看看代码是否有问题。也有可能缓存之类的导致。
如果实在排查不了可以考虑使用 可选链运算符(?.) 来处理。
- this.$set(this.form2, "platAddr", response.rows[0].platAddr)+ this.$set(this.form2, "platAddr", response.rows[0]?.platAddr)
报错说response.rows[0]
未定义 那你判断response.rows[0]
是否存在啊
已经解决,采用response.total > 0
但是之前也试过,看样子应该是浏览器缓存影响的。
在JavaScript中,异步函数(如使用.then()
方法的函数)并不会直接阻止后续代码的执行,而是允许代码在等待某个操作(如网络请求)完成时继续执行。在你的代码中,getPlat
函数可能还没有完成其异步操作(例如,它可能还在等待服务器的响应),而你的代码已经试图访问返回的结果了。
在你的例子中,错误消息Uncaught (in promise) TypeError: response.rows[0] is undefined
表明response.rows
数组是空的(或者response.rows
本身就是undefined
),因此尝试访问response.rows[0]
时会导致错误。这可能是因为getPlat
函数的异步操作还没有完成,或者服务器返回的数据中没有rows
属性,或者rows
数组是空的。
为了解决这个问题,你可以在访问response.rows[0]
之前先检查response.rows
是否存在并且长度大于0。这样,如果response.rows
是空的,你的代码就不会尝试访问response.rows[0]
,从而避免了错误。
以下是一个修改后的代码示例:
getPlat({"tenantId":row.id}).then(response=>{ console.log(response.rows.length) if(response.total>0 && response.rows && response.rows.length > 0){ this.$set(this.form2,"platAddr",response.rows[0].platAddr) this.$set(this.form2,"platDesc",response.rows[0].platDesc) this.$set(this.form2,"platDomain",response.rows[0].platDomain) this.$set(this.form2,"platLogo",response.rows[0].platLogo) this.$set(this.form2,"platName",response.rows[0].platName) this.$set(this.form2,"id",response.rows[0].id) }else{ console.log("未设置平台") }})
在这个修改后的代码中,我添加了一个额外的条件response.rows && response.rows.length > 0
来检查response.rows
是否存在并且长度大于0。这样,只有当response.rows
存在并且长度大于0时,代码才会尝试访问response.rows[0]
,从而避免了错误。
问题内容: 查看此代码: 正如您在控制台中看到的那样,“动画”功能是异步的,它“分叉”了事件处理程序块代码的流程。事实上 : 遵循块代码的流程! 如果我希望以此行为创建自己的代码,该如何使用javascript/jquery进行创建?我认为这是不使用的策略 问题答案: 您不能创建真正的自定义异步函数。您最终将不得不利用本机提供的技术,例如: 一些HTML5 API,例如文件API,Web数据库AP
经常看到的一个题目,特此求解 gpt的写法是: async/await callback function
问题内容: 我想每60秒在Python上执行一个函数,但是我不想同时被阻塞。 如何异步进行? 使用此代码,函数f在20秒time.time中每3秒执行一次。最后,它给出了一个错误,我认为这是因为threading.timer尚未被取消。 如何取消呢? 提前致谢! 问题答案: 您可以尝试threading.Timer类:http : //docs.python.org/library/threadi
本文向大家介绍再谈Javascript中的异步以及如何异步,包括了再谈Javascript中的异步以及如何异步的使用技巧和注意事项,需要的朋友参考一下 为什么需要异步?why?来看一段代码。 问题1: 这段代码的意思是执行100...次后再执行alert,这样带来的问题是,严重堵塞了后面代码的执行,至于为什么,主要是因为JS是单线程的。 问题2: 我们通常要解决这样一个问题,如果我们需要在
本文向大家介绍请你说一下阻塞,非阻塞,同步,异步相关面试题,主要包含被问及请你说一下阻塞,非阻塞,同步,异步时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 阻塞和非阻塞:调用者在事件没有发生的时候,一直在等待事件发生,不能去处理别的任务这是阻塞。调用者在事件没有发生的时候,可以去处理别的任务这是非阻塞。 同步和异步:调用者必须循环自去查看事件有没有发生,这种情况是同步。调用者不用自己去查看
问题内容: 首先,这是一个非常特殊的情况,它以错误的方式故意将异步调用改型为一个非常同步的代码库,该代码库长成千上万行,并且当前时间不具备进行更改的能力。对的。” 它伤害了我的每一个生命,但是现实和理想往往并没有相互融合。我知道这很糟糕。 好的,顺便说一句,我该如何做,这样我可以: 示例(或缺少示例)全部使用库和/或编译器,这两种库均不适用于此解决方案。我需要一个如何使其冻结的具体示例(例如,在调