@samitouri / QOS-React-2 / commits / b1247690d5

Load in parallel, evaluate linearly as they come in

Nate Hunzaker committed May 21, 2014 at 15:07 UTC b1247690d59671992c7e1f129398027403a5efed
1 file changed +20 -15
vendor/browser-transforms.js
+20 -15
@@ -167,26 +167,35 @@ var load = exports.load = function(url, callback) {
167 return xhr.send(null);
168 };
169
170 -loadScripts = function(scripts, callback) {
171 - var result = [];
170 +loadScripts = function(scripts) {
171 + var result = scripts.map(function() {
172 + return false;
173 + });
174 + var count = result.length;
175
176 var check = function() {
174 - var isComplete = result.every(function(task) {
175 - return task !== false;
176 - });
177 - if (isComplete) callback(result);
177 + var script, i;
178 +
179 + for (i = 0; i < count; i++) {
180 + script = result[i];
181 +
182 + if (script && !script.executed) {
183 + script.executed = true;
184 + run(script.content, script.url);
185 + } else if (!script) {
186 + break;
187 + }
188 + };
189 };
190
191 scripts.forEach(function(script, i) {
181 - result[i] = false;
182 -
192 if (script.src) {
193 load(script.src, function(content, url) {
185 - result[i] = { content: content, url: url };
194 + result[i] = { executed: false, content: content, url: url };
195 check();
196 });
197 } else {
189 - result[i] = { content: script.innerHTML, url: null };
198 + result[i] = { executed: false, content: script.innerHTML, url: null };
199 check();
200 }
201 });
@@ -205,11 +214,7 @@ runScripts = function() {
214
215 console.warn("You are using the in-browser JSX transformer. Be sure to precompile your JSX for production - http://facebook.github.io/react/docs/tooling-integration.html#jsx");
216
208 - loadScripts(jsxScripts, function(results) {
209 - results.forEach(function(config) {
210 - run(config.content, config.url);
211 - });
212 - });
217 + loadScripts(jsxScripts);
218 };
219
220 if (typeof window !== "undefined" && window !== null) {