寻找一个下划线包装,以避免竞争条件

时间:2017-07-18 10:21:11

标签: javascript jquery underscore.js

在我正在调试的应用程序中,以前的开发人员似乎依赖于underscore.js做了几件事。

我在浏览器控制台中间歇性地出现“_ is undefined”错误,导致应用程序块无法正常运行。

下划线库最终似乎会加载,因为我能够在浏览器中执行console.log(_)并在页面完全加载后获得一个巨大的对象。

我的问题是:是否有一种首选的方法来包装依赖于下划线的函数?(换句话说,做下划线的开发人员经常使用类似于包含一堆逻辑的旧实践的东西在$(function(){...})内部,以确保它在加载jQuery后运行?)

1 个答案:

答案 0 :(得分:0)

  • 这个脚本是否更接近你想要的?我使用了here

  • 中的脚本加载器
  • 它加载给定的脚本列表,并为您提供一个回调句柄,您可以在其中调用依赖的js函数



<html>

<head>
  <script type='text/javascript'>
    function loadScripts(array, callback) {
      var loader = function(src, handler) {
        var script = document.createElement("script");
        script.src = src;
        script.onload = script.onreadystatechange = function() {
          script.onreadystatechange = script.onload = null;
          handler();
        }
        var head = document.getElementsByTagName("head")[0];
        (head || document.body).appendChild(script);
      };
      (function run() {
        if (array.length != 0) {
          loader(array.shift(), run);
        } else {
          callback && callback();
        }
      })();
    }

    loadScripts([
      "https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"
    ], function() {
      console.log(_);
      var arr = ['jQuery', 'underscore', 'jasmine'];
      _.each(arr, (val) => {
        console.log(val);
      });
    });
  </script>
</head>

<body>

</body>

</html>
&#13;
&#13;
&#13;