javascript - 在没有锁定的情况下等待延迟加载的对象?

标签 javascript lazy-loading

我已经有了根据请求延迟加载脚本的代码。我现在的问题是等待执行某些代码,直到对象可用。我不能使用 setTimeout(),因为它不会阻止执行。

那么在不锁定浏览器的情况下“等待”加载的好方法是什么?

同样,不能使用原始 setTimeout()。

最佳答案

假设您控制脚本的内容,您可以在延迟加载脚本的底部放置一些要执行的代码,以向主页指示脚本已加载。例如,在您的页面中,您可以执行以下操作:

var loadingScripts = 0;
var loadScript = function() {
    // Do what you need to do to load the script...

    loadingScripts++;
}

var loadedScript = function() {
    loadingScripts--;
    if (loadingScripts == 0) {
        // Kick off execution of code that requires the lazy loaded scripts.
    }
}

然后在您的脚本中,将此代码添加到底部:

loadedScript();

您可以使用数组而不是整数来为这个示例增添趣味(以跟踪加载了哪些特定脚本)。您也可以使用对象来将特定函数调用与特定脚本的完成相关联。我的示例保持简单,但询问您是否希望我展示如何扩展代码。


这里介绍了如何在加载脚本后使用回调继续执行特定代码(再次假设您控制脚本本身)。

var scriptCallbacks = {}
var loadScript = function(scriptname, callback) {
    // Do what you need to load scriptname

    scriptCallbacks[scriptname] = callback;
}

var loadedScript = function(scriptname) {
    (scriptCallbacks[scriptname])();
}

然后当你想加载一个脚本时,你可以做这样的事情......

var callback = function() {
    // Write exactly what you want executed once your script is loaded
}

loadScript("MyScript.js", callback);

同样,在您的延迟加载脚本中,只需将此代码添加到底部以通知您的回调触发:

loadedScript("MyScript.js");

关于javascript - 在没有锁定的情况下等待延迟加载的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/903012/

相关文章:

java - hibernate : failed to lazily initialize a collection

java - Hibernate LAZY fetch 未初始化实例

jQuery LazyLoad 隐藏 div 中的图像

javascript - 延迟加载/延迟 X JavaScript 数量

asp.net - ASP.NET 中的延迟加载图像

javascript - 为什么函数在console.log中先执行?

javascript - 定制的js脚本可以在 Debug模式下工作,但不能在Azure上工作

javascript - 为什么更新 React 上下文值时我的 useEffect() 钩子(Hook)不会触发?

javascript - ExtJS 4.2.1 - 不使用 ext-debug.js 作为核心,用 `requires` 编写程序

javascript - 从字符串中删除标点符号?