2021-01-30 15:03:55 +08:00

54 lines
1.3 KiB
TypeScript

interface ProxyLoader {
loadCss(src: string): any
loadScript(src: string): Promise<any>
loadScriptConcurrent(src: Array<string>): Promise<any>
}
class loaderProxy implements ProxyLoader {
constructor() { }
protected scriptLoaderCache: Array<string> = []
public loadCss = (src: string): any => {
let element = document.createElement("link")
element.rel = "stylesheet"
element.href = src
document.body.appendChild(element)
}
public loadScript = async (src: string): Promise<any> => {
if (this.scriptLoaderCache.includes(src)) {
return src
} else {
let element: Element = document.createElement("script")
element.src = src
document.body.appendChild(element)
element.onload = () => {
return this.scriptLoaderCache.push(src)
}
}
}
public loadScriptConcurrent = async (srcList: Array<string>): Promise<any> => {
if (Array.isArray(srcList)) {
const len: number = srcList.length
if (len > 0) {
let count: number = 0
srcList.map(src => {
if (src) {
this.loadScript(src).then(() => {
count++
if (count === len) {
return
}
})
}
})
}
}
}
}
export const loader = new loaderProxy()