使用promise处理vue中引入的js加载先后问题 - Go语言中文社区

使用promise处理vue中引入的js加载先后问题


最近在开发工作流,也不能说开发吧,公司有一套工作流的代码,我只是个搬运工,转化为vue项目!不得不说,真不容易,原谅我曾经的年少无知,竟然在技术总监面前,夸下海口说这个简单(搬代码嘛)!

开始把html拷贝到自己创建的flow.vue页面,把css丢到assets文件夹下,js丢到static文件夹下,然后麻烦点来了,js怎么引入;

export暴露出来然后import引入?index.html中用script引入?

不好意思,都gg,export暴露不出来,因为一个js中不仅有变量还有方法,还有自调用等等,我想暴露出来都无从下手;直接在index引入报错,原因是需要获取flow.vue页面的一些变量,而你如果在index直接引入了,js先加载了,那这些变量肯定找不到,就报错了!

解决办法:加载完flow.vue的dom之后再引入那些js;

自己建一个文件夹,里面放上这段代码,然后在flow.vue页面引入这个js,因为这个js只能是一个一个的传进去,所以你有多少个js,就要调用多少次,code是一个标识,比如你的是jquery,code标识你可以写为jq,随意!这个的作用只是为了重复加载,url就是你js文件的路径

// 加载js
let scriptLoaded = {}
export function loadScript(code, url) {
    return new Promise((resolve, reject) => {
        if (typeof scriptLoaded[code] === "undefined") {
            let script = document.createElement("script")
            script.src = url
            document.body.appendChild(script)

            script.onload = function() {
                scriptLoaded[code] = true
                resolve({code})
            }
            script.onerror = function(error) {
                reject(error)
            }
        } else {
            resolve()
        }
    })
}

我这里分成三个数组是因为有些js存在依赖关系,比如说,我a.js中定义了一个变量,然后b.js用到了,c.js也用到了,那这时候,我应该等a.js先加载完,不然b跟c就会报错,(顺带一提,这个变量要定义为全局=>window.xxx);上面说的当前页的变量,如果这些js文件要用到,也要定义为全局变量;

promise.all()能监听promise任务完成的数组,所有任务都执行完之后就会返回resolve;所以当js跟js直接只有一方依赖某个js的时候,promise.all()是个很好的方法;

在.then(res =>{})回调中写你成功执行完后要执行的代码就可以了;

写的有些乱,毕竟还描述了项目的东西!原项目什么vue、react之类的框架都没用,只是用了jq、js还有一些ui框架,还有就是流程框架!也不知道迭代了多少个版本了!不要说把它的方法用vue写法写一下就好,十多个js,几乎都存在依赖关系,最少的有五百多行代码,最多的上万行,不是我这种小菜鸡想用vue写法转一转就能转的,而且不太了解以前的人的思路,就两天时间,我也只能解决这么多了!

项目中还遇到一个问题,有两个js是相互调用彼此的变量的关系,先加载哪一个都不行,另外一个会报错;最后实在找不到解决办法,只能把两个js代码合成一个了,做法很low,但是东西实现了!如果有人知道其他的解决办法,请告诉我,跪谢啊啊啊啊!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41700532/article/details/97140429
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 09:36:29
  • 阅读 ( 960 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢