Vue 报错 VM6290:1 Uncaught SyntaxError: Unexpected identifier ‘Promise’
排查
控制台报了一个错误 , Uncaught SyntaxError: Unexpected identifier ‘Promise’,网上查到的方法是 缺少符号,语法写法错误,但这些都没有解决我的问题,于是开始了 一行一行代码注释,排查,找原因
一直以为 是使用了Promise
出现的错误,将Promise相关代码注释掉
,控制台还是会报这个错误
最终发现 是定时器 setTimeout()里
调用了该方法 导致控制台报的错
修改前代码
mounted() {this.init();this.getBoxStatus();let timer = null;if (timer) {clearInterval(timer);} else {timer = setInterval(() => {setTimeout(this.getBoxStatus(), 0);}, 1000);}this.$once("hook:beforeDestroy", () => {clearInterval(timer);});},async getBoxStatus() {let data = {cid: this.$route.params.cid,};const res = await getDuoBoxStatusDto(data);if (res && res.length > 0) {if (res[0] && res[0].cid) {const [r1 = {}, r2 = {}] = await Promise.all([videodownloading({ cid: `${res[0].cid}_1` }),//调接口videodownloading({ cid: `${res[0].cid}_2` }),//调接口]);this.SMD_UrlA01 = r1.data? "data:image/png;base64," + res.data: this.defultSmdImg;this.SMD_UrlA02 = r2.data? "data:image/png;base64," + res.data: this.defultSmdImg;}},
解决办法
只需要将 setTimeOut()
中调用 方法改一下
修改后
mounted() {this.init();this.getBoxStatus();let timer = null;if (timer) {clearInterval(timer);} else {timer = setInterval(() => {setTimeout(async () => {this.getBoxStatus();}, 0);}, 1000);}this.$once("hook:beforeDestroy", () => {clearInterval(timer);});},
附
setTimeout(this.getBoxStatus(), 0);
适用于一般函数
mounted() {this.init();this.getBoxStatus();let timer = null;if (timer) {clearInterval(timer);} else {timer = setInterval(() => {setTimeout(this.getBoxStatus(), 0);}, 1000);}this.$once("hook:beforeDestroy", () => {clearInterval(timer);});},
methods(){getBoxStatus(){let data = {cid: this.$route.params.cid,};getDuoBoxStatusDto(data).then(res=>{//业务逻辑});
}