Skip to content
This repository was archived by the owner on Jul 13, 2020. It is now read-only.

Commit 9c141eb

Browse files
committed
share loader promises (fixes #212)
1 parent 77d0fad commit 9c141eb

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/loader.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,8 @@ function logloads(loads) {
843843
this._loader = {
844844
loaderObj: this,
845845
loads: [],
846-
modules: {}
846+
modules: {},
847+
importPromises: {}
847848
};
848849

849850
// 26.3.3.6
@@ -859,8 +860,8 @@ function logloads(loads) {
859860
function Module() {}
860861

861862
// importPromises adds ability to import a module twice without error - https://bugs.ecmascript.org/show_bug.cgi?id=2601
862-
var importPromises = {};
863-
function createImportPromise(name, promise) {
863+
function createImportPromise(loader, name, promise) {
864+
var importPromises = loader._loader.importPromises;
864865
importPromises[name] = promise;
865866
promise.then(function() {
866867
importPromises[name] = undefined;
@@ -877,9 +878,9 @@ function logloads(loads) {
877878
// 26.3.3.2
878879
define: function(name, source, options) {
879880
// check if already defined
880-
if (importPromises[name])
881+
if (this._loader.importPromises[name])
881882
throw new TypeError('Module is already loading.');
882-
return createImportPromise(name, new Promise(asyncStartLoadPartwayThrough({
883+
return createImportPromise(this, name, new Promise(asyncStartLoadPartwayThrough({
883884
step: 'translate',
884885
loader: this._loader,
885886
moduleName: name,
@@ -919,10 +920,10 @@ function logloads(loads) {
919920
return loader.modules[name].module;
920921
}
921922

922-
return importPromises[name] || createImportPromise(name,
923+
return loader.importPromises[name] || createImportPromise(loaderObj, name,
923924
loadModule(loader, name, options || {})
924925
.then(function(load) {
925-
delete importPromises[name];
926+
delete loader.importPromises[name];
926927
return evaluateLoadedModule(loader, load);
927928
}));
928929
});
@@ -934,7 +935,7 @@ function logloads(loads) {
934935
doEnsureEvaluated(this._loader.modules[name], [], this._loader);
935936
return Promise.resolve(this._loader.modules[name].module);
936937
}
937-
return importPromises[name] || createImportPromise(name, loadModule(this._loader, name, {}));
938+
return this._loader.importPromises[name] || createImportPromise(this, name, loadModule(this._loader, name, {}));
938939
},
939940
// 26.3.3.11
940941
module: function(source, options) {

0 commit comments

Comments
 (0)