JavaScript 雷霆群从 CDN 加载外部库

标签 javascript design-patterns promise

第一次使用pica()时,它将加载外部库。但是,如果在完成加载外部 JS 之前再次使用 pica(),则它不应再次加载库,因此 alert() 将运行。

let picaStatus = 0;

function pica(...args) {
  if (picaStatus == 1) { // library previously loaded
    pica.resizeCanvas(...args);
  } else if (picaStatus == 0) { // library hasn't been loaded
    picaStatus = -1;
    $.getScript("//cdnjs.cloudflare.com/ajax/libs/pica/2.0.4/pica.min.js", () => {
      picaStatus = 1;
      pica.resizeCanvas(...args);
    });
  } else if (picaStatus == -1) { // library is currently being loaded by another call
    alert('loading collision');
  }
}

如何让第二个函数调用等待库加载,而不是抛出 alert() 并删除函数调用?

最佳答案

使状态成为已加载脚本的 promise :

let picaStatus = null;

function pica(...args) {
  if (!picaStatus) { // library hasn't been loaded
    picaStatus = $.getScript("//cdnjs.cloudflare.com/ajax/libs/pica/2.0.4/pica.min.js");
  }
  picaStatus.then(() => {
    pica.resizeCanvas(...args);
  });
}

关于JavaScript 雷霆群从 CDN 加载外部库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41947983/

相关文章:

javascript - 简单的跨浏览器绘制javascript库

java - 嵌入式系统中线程池的优点

javascript - Ember 过渡和渲染完成事件

javascript - 在 Promise 返回函数中找到第一个成功

javascript - 在没有 else 的情况下使用三元的替代方法

javascript - 如何设置 XDomainRequest 对象的内容类型?

ios - iOS 中的多个主题模式处理

javascript - 迭代通常适用于 Map()、Set().. 但违背了 promise

javascript - 我可以打开一个新窗口并用字符串变量填充它吗?

c++ - 虚拟表未定义