Skip to content

Instantly share code, notes, and snippets.

@JeffreyZhao
Created December 12, 2011 15:45
Show Gist options
  • Save JeffreyZhao/1467945 to your computer and use it in GitHub Desktop.
Save JeffreyZhao/1467945 to your computer and use it in GitHub Desktop.
// { name: dependencies, ... }
var scripts = {
s1: ["s2", "s3"],
s2: ["s3", "s4", "s5"],
s3: ["s4"],
s4: [],
s5: []
}
var scriptsLoadStarted = { };
var scriptsExecuted = { };
var scriptsDependencies = { };
var loadScript = function(name, callback) {
scriptsLoadStarted[name] = true;
setTimeout(function () { callback(name, scripts[name]); }, 1000);
}
var executeScript = function (name) {
console.log(name + " executed!");
scriptsExecuted[name] = true;
for (var m in scriptsDependencies) {
var dependencies = scriptsDependencies[m];
var index = dependencies.indexOf(name);
if (index >= 0) {
dependencies.splice(index, 1);
if (dependencies.length <= 0) {
executeScript(m);
}
}
}
}
var loadScriptCallback = function (name, dependencies) {
scriptsDependencies[name] = [];
console.log(name + " loaded!");
for (var i = 0; i < dependencies.length; i++) {
var d = dependencies[i];
if (!scriptsExecuted[d]) {
scriptsDependencies[name].push(d);
if (!scriptsLoadStarted[d]) {
loadScript(d, loadScriptCallback);
}
}
}
if (scriptsDependencies[name].length <= 0) {
executeScript(name);
}
}
loadScript("s1", loadScriptCallback);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment