getScript在前端中使用的非常广泛,那么这里也分享下自己使用的ts版本的getScript: 正常请求一个js文件,然后设置了一个5000ms的过期时间,若请求资源不成功,则进入到 这种方式,其实稍微改造一下,也是可以直接用来跨域,请求支持jsonp接口的。在url的后面添加上callback的请求参数,然后在回调里执行这个callback。/**
* 加载js文件
* @param {string} url 要加载的js文件链接
* @param {function} callback 回调函数
* @returns {Promise} 返回一个Promise对象,若加载失败或者超时,则reject
*/
const getScript = (url: string, callback: ()=>{}): Promise<null> => {
const head = document.getElementsByTagName('head')[0];
const script = document.createElement('script');
const timeout: number = 5000; // 过期时间
let timer: number;
script.setAttribute('type', 'text/javascript');
script.setAttribute('charset', 'UTF-8');
script.setAttribute('src', url);
if (sid) {
script.setAttribute('id', sid);
}
const cleanup = () => {
if (script.parentNode) {
script.parentNode.removeChild(script);
}
if (timer) {
clearTimeout(timer);
}
};
head.appendChild(script);
return new Promise((resolve, reject) => {
// 执行回调
const callbackFn = () => {
if (timer) {
clearTimeout(timer);
}
callback();
resolve();
};
script.onload = () => {
callbackFn();
};
if (timeout) {
timer = setTimeout(() => {
cleanup();
reject(new Error(`get ${url} timeout`));
}, timeout);
}
});
};
reject
中。同时,getScript支持使用callback和Promise两种方式执行结果的回调,不过callback的方式无法获取到超时的情况:getScript('http://mat1.gtimg.com/libs/jquery2/2.2.0/jquery.min.js').then((jQuery: any)=>{
console.log(jQuery.fn.jquery);
}).catch(e=>console.error('请求超时'));
例如:const getScript = (url: string, data: {}): Promise
版权属于:
加速器之家
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论