异步加载js

export default class APILoader {
  constructor(props) {
    this.apiURL = props;
    this.scriptId = encodeURIComponent(props).replace(/[.|:|%|h|t|p|s]/g, '');
  }

  buildScriptTag() {
    const prevScript = document.getElementById(this.scriptId);
    if (prevScript) {
      return prevScript;
    }
    const script = document.createElement('script');
    script.type = 'text/javascript';
    script.async = true;
    script.defer = true;
    script.id = this.scriptId;
    script.src = this.apiURL;
    return script;
  }

  getMainPromise() {
    const script = this.buildScriptTag();
    const p = new Promise((resolve) => {
      script.onload = () => {
        resolve({
          code: 200,
          id: this.scriptId,
          src: this.apiURL,
        });
      };
    });
    document.body.appendChild(script);
    return p;
  }

  load(data = {}) {
    const { mainObj } = data;
    this.mainObj = mainObj;
    if (mainObj) {
      return new Promise((resolve) => {
        resolve(mainObj);
      });
    }
    return this.getMainPromise();
  }
}

使用:

new APILoader("https://www.XXXXXX")
  .load({ mainObj: window })
  .then((obj) => {
    console.log(obj);
  });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值